Python+MongoDB自增键值的简单实现


Posted in Python onNovember 04, 2016

背景

最近在写一个测试工具箱,里面有一个bug记录系统,因为后台我是用Django和MongoDB来实现的,就遇到了一个问题,要如何实现一个自增的字段。

传统的关系型数据库要实现起来是非常容易,只要直接设置一个自增字段就行了,插入数据时不用管这个键值,只管自己处理的数据就行了,会自动实现自增的功能,但是非关系型数据库好像没有这个功能(或者我不知道)。百度之后发现都是MongoDB的设置方法,并不是我想要的。

解决思路

百度没有找到好的思路,那就只能自己解决了,我的想法很简单,字段不会自增,那么就自己造一个自增的方案。

我发现在MongoDB修改的方法有一个$inc的方法.可以实现int类型的自增。那么就非常简单了,自己建一个collection,然后这个collection中只有一个int的字段,每次插入数据时来这个collection取ID就行了,然后再调用一下$inc方法,那么就实现了自动自增的方案。

代码展示

Python实现起来还是非常简单的Python和Django非常契合。代码如下:

 

def bugPlus(self):
  """
  bugID自增
  :return:True
  """
  db = self.__chooseCollection(config.COLLECTION['bugID'])
  db.update_one({"bugID": self.getBugID()}, {"$inc": {"bugID": 1}})
  return True

 每次插入成功后,调用这个方法就可以实现ID的自增。

def getBugID(self):
  """
  获取当前bug的最新编号
  :return:None
  """
  db = self.__chooseCollection(config.COLLECTION['bugID'])
  rst = db.find_one()
  return rst['bugID']

在插入之前,调用这个方法,这样每次插入数据时插入的ID就是实现自增的ID。

缺点

当然,这种方式还是有缺点的,调用的时候多使用了方法,因此需要确认方法是否执行成功,否则会导致下次插入的ID不是自增后的数据。每次多调了一次方法,会导致性能下降。

其他

如果有更好的实现方式,请告诉我!

以上这篇Python+MongoDB自增键值的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python爬虫入门教程之点点美女图片爬虫代码分享
Sep 02 Python
python黑魔法之参数传递
Feb 12 Python
Python进阶-函数默认参数(详解)
May 18 Python
python数字图像处理之高级形态学处理
Apr 27 Python
Python实现矩阵相乘的三种方法小结
Jul 26 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
如何基于Python pygame实现动画跑马灯
Nov 18 Python
python中pickle模块浅析
Dec 29 Python
Python Numpy之linspace用法说明
Apr 17 Python
基于python制作简易版学生信息管理系统
Apr 20 Python
Keras多线程机制与flask多线程冲突的解决方案
May 28 Python
Python多线程 Queue 模块常见用法
Jul 04 Python
基于Python的接口测试框架实例
Nov 04 #Python
浅谈Python爬取网页的编码处理
Nov 04 #Python
Django接受前端数据的几种方法总结
Nov 04 #Python
Python多维/嵌套字典数据无限遍历的实现
Nov 04 #Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 #Python
浅谈python字典多键值及重复键值的使用
Nov 04 #Python
用Python将动态GIF图片倒放播放的方法
Nov 02 #Python
You might like
操作Oracle的php类
2006/10/09 PHP
php程序效率优化的一些策略小结
2010/07/17 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
2020/05/15 PHP
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
React实现点击删除列表中对应项
2017/01/10 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python如何获取系统iops示例代码
2016/09/06 Python
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
python操作excel的方法
2018/08/16 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
旅游管理本科生求职信
2013/10/14 职场文书
工程项目经理任命书
2014/06/05 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
中秋节感想
2015/08/10 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书