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模拟Django框架实例
May 17 Python
Python利用turtle库绘制彩虹代码示例
Dec 20 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
Aug 03 Python
python numpy 按行归一化的实例
Jan 21 Python
Python获取网段内ping通IP的方法
Jan 31 Python
Python正则表达式匹配数字和小数的方法
Jul 03 Python
python递归法实现简易连连看小游戏
Mar 25 Python
将Python文件打包成.EXE可执行文件的方法
Aug 11 Python
python pandas移动窗口函数rolling的用法
Feb 29 Python
Python 字符串池化的前提
Jul 03 Python
python如何实时获取tcpdump输出
Sep 16 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
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
PHPAnalysis中文分词类详解
2014/06/13 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
tab栏切换原理
2017/03/22 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
python中的__slots__使用示例
2015/02/26 Python
python正则表达式之作业计算器
2016/03/18 Python
Python3编程实现获取阿里云ECS实例及监控的方法
2017/08/18 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
python移位运算的实现
2019/07/15 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
HTML5之消息通知的使用(Web Notification)
2018/10/30 HTML / CSS
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
20年同学聚会感言
2014/02/03 职场文书
法制报告会主持词
2014/04/02 职场文书
2014年征兵标语
2014/06/20 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
党员三严三实心得体会
2014/10/13 职场文书