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之引用和类属性的初步理解
May 15 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
Sep 18 Python
PyQt5每天必学之事件与信号
Apr 20 Python
django Admin文档生成器使用详解
Jul 22 Python
python3.6生成器yield用法实例分析
Aug 23 Python
django删除表重建的实现方法
Aug 28 Python
pytorch:model.train和model.eval用法及区别详解
Feb 20 Python
tensorflow指定CPU与GPU运算的方法实现
Apr 21 Python
Python3爬虫中关于Ajax分析方法的总结
Jul 10 Python
深入理解python协程
Jun 15 Python
Python测试框架pytest高阶用法全面详解
Jun 01 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获取文章上一页与下一页的方法
2014/12/01 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
php实现网站留言板功能
2015/11/04 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
使用Apache的rewrite
2021/03/09 Servers
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
在Linux下使用Python的matplotlib绘制数据图的教程
2015/06/11 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
django中cookiecutter的使用教程
2020/12/03 Python
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
法律专业自我鉴定
2013/10/03 职场文书
毕业自我鉴定范文
2013/11/06 职场文书
办公室主任先进事迹
2014/01/18 职场文书
给护士表扬信
2014/01/19 职场文书
霸王洗发水广告词
2014/03/14 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
初中同学会致辞
2015/08/01 职场文书
素质拓展训练感想
2015/08/07 职场文书
oracle索引总结
2021/09/25 Oracle