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使用内存zipfile对象在内存中打包文件示例
Apr 30 Python
Python中使用Boolean操作符做真值测试实例
Jan 30 Python
Python实现购物系统(示例讲解)
Sep 13 Python
python-str,list,set间的转换实例
Jun 27 Python
Flask之flask-script模块使用
Jul 26 Python
python代码 输入数字使其反向输出的方法
Dec 22 Python
解决python给列表里添加字典时被最后一个覆盖的问题
Jan 21 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
python傅里叶变换FFT绘制频谱图
Jul 19 Python
什么是Python中的匿名函数
Jun 02 Python
Keras搭建自编码器操作
Jul 03 Python
python数据处理之Pandas类型转换
Apr 28 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
短波问题解答
2021/02/28 无线电
php对二维数组进行排序的简单实例
2013/12/19 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
javascript import css实例代码
2008/07/18 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
[01:10:58]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
python 文件和路径操作函数小结
2009/11/23 Python
python实现画圆功能
2018/01/25 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
python求质数列表的例子
2019/11/24 Python
Python Json数据文件操作原理解析
2020/05/09 Python
什么是python的id函数
2020/06/11 Python
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
质量工程师岗位职责
2013/11/16 职场文书
综合实践活动方案
2014/02/14 职场文书
北京奥运会主题口号
2014/06/13 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
小区保洁员岗位职责
2015/04/10 职场文书
教师读书笔记
2015/06/29 职场文书
二年级作文之动物作文
2019/11/13 职场文书
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
MySQL 开窗函数
2022/02/15 MySQL
python中的getter与setter你了解吗
2022/03/24 Python