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自动化测试之setUp与tearDown实例
Sep 28 Python
Python的迭代器和生成器使用实例
Jan 14 Python
Python可跨平台实现获取按键的方法
Mar 05 Python
Python如何实现守护进程的方法示例
Feb 08 Python
Python实现自动登录百度空间的方法
Jun 10 Python
Python开发最牛逼的IDE——pycharm
Aug 01 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
Python字符串逆序输出的实例讲解
Feb 16 Python
Django中使用MySQL5.5的教程
Dec 18 Python
Python读取csv文件实例解析
Dec 30 Python
Python matplotlib修改默认字体的操作
Mar 05 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 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
用Flash图形化数据(二)
2006/10/09 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
2014/06/12 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
js TextArea的选中区域处理
2010/12/28 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
javascript trim函数在IE下不能用的解决方法
2014/09/12 Javascript
Bootstrap每天必学之警告框插件
2016/04/26 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
2017/01/21 Javascript
JavaScript实现无穷滚动加载数据
2017/05/06 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
VUE搭建手机商城心得和遇到的坑
2019/02/21 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
使用python实现tcp自动重连
2017/07/02 Python
详解python字节码
2018/02/07 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
python查看模块,对象的函数方法
2018/10/16 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
Python post请求实现代码实例
2020/02/28 Python
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
会计毕业生自荐信
2013/11/21 职场文书
环境科学专业个人求职的自我评价
2013/11/28 职场文书
银行个人求职自荐信范文
2013/12/16 职场文书
网络编辑岗位职责
2014/03/18 职场文书
支部鉴定材料
2014/06/02 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
经济贸易系求职信
2014/08/04 职场文书
党课培训心得体会
2014/09/02 职场文书
大专护理专业自荐信
2015/03/25 职场文书
Python制作动态字符画的源码
2021/08/04 Python