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 字典(dict)遍历的四种方法性能测试报告
Jun 25 Python
Python常用小技巧总结
Jun 01 Python
python append、extend与insert的区别
Oct 13 Python
Python PyQt5标准对话框用法示例
Aug 23 Python
Python实现基本数据结构中队列的操作方法示例
Dec 04 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 Python
Python写出新冠状病毒确诊人数地图的方法
Feb 12 Python
python调用百度API实现人脸识别
Nov 17 Python
python中温度单位转换的实例方法
Dec 27 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
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
php中Smarty模板初体验
2011/08/08 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
php图片添加水印例子
2016/07/20 PHP
php图像验证码生成代码
2017/06/08 PHP
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
javascript运行机制之this详细介绍
2014/02/07 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
微信小程序实现首页弹出广告
2020/12/03 Javascript
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
用virtualenv建立多个Python独立虚拟开发环境
2017/07/06 Python
python如何定义带参数的装饰器
2018/03/20 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
html5 自定义播放器核心代码
2013/12/20 HTML / CSS
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
京东国际站:JOYBUY
2017/11/23 全球购物
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
公开致歉信
2019/06/24 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
linux下安装redis图文详细步骤
2021/12/04 Redis
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA
Linux磁盘管理方法介绍
2022/06/01 Servers
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript