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实现测试磁盘性能的方法
Mar 12 Python
用python实现百度翻译的示例代码
Mar 09 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
python实现微信小程序自动回复
Sep 10 Python
Python3解释器知识点总结
Feb 19 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
pygame实现弹球游戏
Apr 14 Python
将python字符串转化成长表达式的函数eval实例
May 11 Python
python cv2.resize函数high和width注意事项说明
Jul 05 Python
Python下划线5种含义代码实例解析
Jul 10 Python
python中os.path.join()函数实例用法
May 26 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
允许phpmyadmin空密码登录的配置方法
2011/05/29 PHP
PHP的explode和implode的使用说明
2011/07/17 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
laravel 修改记住我功能的cookie保存时间的方法
2019/10/14 PHP
JavaScript原型链示例分享
2014/01/26 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
Python 字符串定义
2009/09/25 Python
使用python进行拆分大文件的方法
2018/12/10 Python
django celery redis使用具体实践
2019/04/08 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
python 获取计算机的网卡信息
2021/02/18 Python
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
波兰补充商店:Muscle Power
2018/10/29 全球购物
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
师范生实习的个人自我鉴定
2013/10/20 职场文书
大专毕业生简历的自我评价
2013/10/20 职场文书
毕业生的自我鉴定
2013/10/29 职场文书
大学毕业感言
2014/01/10 职场文书
教师自我剖析材料
2014/09/29 职场文书
DE1103使用报告
2022/04/05 无线电