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将html转成PDF的实现代码(包含中文)
Mar 04 Python
python模拟登录百度贴吧(百度贴吧登录)实例
Dec 18 Python
使用python的chardet库获得文件编码并修改编码
Jan 22 Python
Python列表和元组的定义与使用操作示例
Jul 26 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 Python
Python绘制的二项分布概率图示例
Aug 22 Python
python3实现多线程聊天室
Dec 12 Python
python中matplotlib条件背景颜色的实现
Sep 02 Python
Python笔试面试题小结
Sep 07 Python
PyQt5中多线程模块QThread使用方法的实现
Jan 31 Python
基于Python绘制子图及子图刻度的变换等的问题
May 23 Python
Python使用Kubernetes API访问集群
May 30 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中截取字符串支持utf-8
2007/01/18 PHP
PHP中unset,array_splice删除数组中元素的区别
2014/07/28 PHP
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
密码框显示提示文字jquery示例
2013/08/29 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
jQuery中:lt选择器用法实例
2014/12/29 Javascript
微信小程序实现图片自适应(支持多图)
2017/01/25 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
python使用socket向客户端发送数据的方法
2015/04/29 Python
Python读取网页内容的方法
2015/07/30 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
Pandas透视表(pivot_table)详解
2019/07/22 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
吸烟检讨书2000字
2014/02/13 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
平安家庭事迹材料
2014/12/20 职场文书
党员倡议书
2015/01/19 职场文书
小学生节水倡议书
2015/04/29 职场文书
朝花夕拾读书笔记
2015/06/29 职场文书