Python+MongoDB自增键值的简单实现
背景
最近在写一个测试工具箱,里面有一个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自增键值的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
Mongodb自增id实现方法
本文实例讲述了Mongodb自增id实现方法.分享给大家供大家参考,具体如下: 首先创建一个自动增长id集合 ids >db.ids.save({name:"user", id:0}); 可以查看一下是否成功 > db.ids.find(); { "_id" : ObjectId("4c637dbd900f00000000686c"), "name" : "user", "id&quo
-
php实现Mongodb自定义方式生成自增ID的方法
本文实例讲述了php实现Mongodb自定义方式生成自增ID的方法.分享给大家供大家参考.具体分析如下: 复制代码 代码如下: //首先创建一个自动增长id集合 ids >db.ids.save({name:"user", id:0}); //可以查看一下是否成功 > db.ids.find(); { "_id" : ObjectId("4c637dbd900f00000000686c"), "name" : &q
-
Python+MongoDB自增键值的简单实现
背景 最近在写一个测试工具箱,里面有一个bug记录系统,因为后台我是用Django和MongoDB来实现的,就遇到了一个问题,要如何实现一个自增的字段. 传统的关系型数据库要实现起来是非常容易,只要直接设置一个自增字段就行了,插入数据时不用管这个键值,只管自己处理的数据就行了,会自动实现自增的功能,但是非关系型数据库好像没有这个功能(或者我不知道).百度之后发现都是MongoDB的设置方法,并不是我想要的. 解决思路 百度没有找到好的思路,那就只能自己解决了,我的想法很简单,字段不会自增,那么就
-
python获取list下标及其值的简单方法
当在python中遍历一个序列时,我们通常采用如下的方法: for item in sequence: process(item) 如果要取到某个item的位置,可以这样写: for index in range(len(sequence)): process(sequence[index]) 另一个比较好的方式是使用python内建的enumerate函数: enumerate(sequence,start=0) 上述函数中,sequence是一个可迭代的对象,可以是列表,字典,文件对象等等.
-
Python 互换字典的键值对实例
1.zip dic = {'a':1, 'b':2, 'c':3} dic_new = dict(zip(dic.values(), dic.keys())) print(dic_new) # {1: 'a', 2: 'b', 3: 'c'} 2.循环 dic = {'a':1, 'b':2, 'c':3} dic_new = {} for key, val in dic.items(): dic_new[val] = key print(dic_new) # {1: 'a', 2: 'b',
-
python 根据字典的键值进行排序的方法
1.利用key排序 d = {'d1':2, 'd2':4, 'd4':1,'d3':3,} for k in sorted(d): print(k,d[k]) d1 2 d2 4 d3 3 d4 1 2.利用value排序:__getitem__ d = {'d1':2, 'd2':4, 'd4':1,'d3':3,} for k in sorted(d,key=d.__getitem__): print(k,d[k]) d4 1 d1 2 d3 3 d2 4 反序:reverse=True
-
Python Sql数据库增删改查操作简单封装
本文实例为大家分享了如何利用Python对数据库的增删改查进行简单的封装,供大家参考,具体内容如下 1.insert import mysql.connector import os import codecs #设置数据库用户名和密码 user='root';#用户名 pwd='root';#密码 host='localhost';#ip地址 db='mysql';#所要操作数据库名字 charset='UTF-8' cnx = mysql.connector.connect(user=use
-
C# 对MongoDB 进行增删改查的简单操作实例
运用到的MongoDB支持的C#驱动,当前版本为1.6.0 下载地址:https://github.com/mongodb/mongo-csharp-driver/downloads 1,连接数据库 复制代码 代码如下: /// <summary> /// 数据库连接 /// </summary> private const string conn = "mongodb://127.0.0.1:27017";
-
Golang将Map的键值对调的实现示例
目录 一.Map是什么? 二.详细代码 1.对调键值 2.进行调用 总结 PS:golang无序的键值对集合map 一.Map是什么? map是一堆键值对的未排序集合,类似Python中字典的概念,它的格式为map[keyType]valueType,是一个key-value的hash结构.map的读取和设置也类似slice一样,通过key来操作,只是slice的index只能是int类型,而map多了很多类型,可以是int,可以是string及所有完全定义了==与!=操作的类型 二.详细代码
-
python中字典按键或键值排序的实现代码
字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序.Python中字典的排序分为按"键"排序和按"值"排序. 按"值"排序 按"值"排序就是根据字典的值进行排序,可以使用内置的sorted()函数. sorted(iterable[, cmp[, key[, reverse]]]) iterable:是可迭代类型类型; cmp:用于比较的
-
Python字典中的键映射多个值的方法(列表或者集合)
一个字典就是一个键对应一个单值的映射.如果你想要一个键映射多个值,那么你就需要将这多个值放到另外的容器中, 比如列表或者集合里面.比如,你可以像下面这样构造这样的字典: d = { 'a' : [1, 2, 3], 'b' : [4, 5] } e = { 'a' : {1, 2, 3}, 'b' : {4, 5} } 选择使用列表还是集合取决于你的实际需求.如果你想保持元素的插入顺序就应该使用列表, 如果想去掉重复元素就使用集合(并且不关心元素的顺序问题). 你可以很方便的使用 collect
-
python 实现二维字典的键值合并等函数
这篇文章主要讲python中关于字典的一些具体操作,讲解的问题都是本人在实际编程中所遇到的问题,读者可以根据自己所遇到的问题具体问题具体分析. (1) 二维字典的键值合并: 先提供一个应用场景: 假设我有两个二维字典: room1 = {orderid1:{roomid1:pred1,roomid2:pred2},orderid2:{roomid3:pred3,roomid4:pred4}} room2 = {orderid1:{roomid1:pred5,roomid2:pred6},orde
随机推荐
- javascript处理表单示例(javascript提交表单)
- DOS命令全集(一)
- Java并发编程示例(三):线程中断
- Oracle 闪回技术详细介绍及总结
- ASP.NET在上传文件时对文件类型的高级判断的代码
- 详解JavaScript ES6中的Generator
- Javascript中的方法链(Method Chaining)介绍
- 微信JSSDK调用微信扫一扫功能的方法
- Python批量重命名同一文件夹下文件的方法
- SQL命令优化需要记住的9点事项
- 浅谈SQL Server中统计对于查询的影响分析
- 电脑高手常用技巧应用全接触
- C++中getline()和get()的方法浅析
- iOS开发中文件的上传和下载功能的基本实现
- C#中new的用法及与override的区别分析
- 第十四节--命名空间
- ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法 原创
- PHP串行化与反串行化实例分析
- Android使用Matrix旋转图片模拟碟片加载过程
- 利用vue+elementUI实现部分引入组件的方法详解