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实现学校管理系统
Jan 11 Python
Python基于property实现类的特性操作示例
Jun 15 Python
利用python实现在微信群刷屏的方法
Feb 21 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
python实现微信定时每天和女友发送消息
Apr 29 Python
pyqt 实现在Widgets中显示图片和文字的方法
Jun 13 Python
使用pyqt5 tablewidget 单元格设置正则表达式
Dec 13 Python
使用python处理题库表格并转化为word形式的实现
Apr 14 Python
Python实现爬取并分析电商评论
Jun 19 Python
python查询MySQL将数据写入Excel
Oct 29 Python
Python类class参数self原理解析
Nov 19 Python
python pillow库的基础使用教程
Jan 13 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
php中文字符截取防乱码
2008/03/28 PHP
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
PHP生成树的方法
2015/07/28 PHP
nginx下安装php7+php5
2016/07/31 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
javascript web页面刷新的方法收集
2009/07/02 Javascript
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
JS实现很酷的EMAIL地址添加功能实例
2015/02/28 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
[04:02]2014DOTA2国际邀请赛 BBC每日综述中国战队将再度登顶
2014/07/21 DOTA
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
python调用新浪微博API项目实践
2014/07/28 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
Python队列、进程间通信、线程案例
2019/10/25 Python
python GUI计算器的实现
2020/10/09 Python
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
校园十佳歌手策划书
2014/01/22 职场文书
广告创意求职信
2014/03/17 职场文书
女生节标语
2014/06/26 职场文书
2014年统战工作总结
2014/12/09 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书
python函数的两种嵌套方法使用
2022/04/02 Python