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 相关文章推荐
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
Python判断直线和矩形是否相交的方法
Jul 14 Python
Ubuntu下安装PyV8
Mar 13 Python
Python 模板引擎的注入问题分析
Jan 01 Python
Python3 适合初学者学习的银行账户登录系统实例
Aug 08 Python
python使用正则表达式的search()函数实现指定位置搜索功能
Nov 10 Python
python3使用SMTP发送简单文本邮件
Jun 19 Python
win10下tensorflow和matplotlib安装教程
Sep 19 Python
python实现扫描ip地址的小程序
Apr 16 Python
Flask教程之重定向与错误处理实例分析
Aug 01 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
通俗讲解python 装饰器
Sep 07 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错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
php 可变函数使用小结
2018/06/12 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
2014/04/30 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
Python运行的17个时新手常见错误小结
2012/08/07 Python
Python对数据库操作
2016/03/28 Python
Python从零开始创建区块链
2018/03/06 Python
python实现批量注册网站用户的示例
2019/02/22 Python
Python语法分析之字符串格式化
2019/06/13 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
EJB3.1都有哪些改进
2012/11/17 面试题
简历的自我评价范文
2014/02/04 职场文书
社区网格化管理实施方案
2014/03/21 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
吨的认识教学反思
2014/04/27 职场文书
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技