使用find_and_modify函數
可以設置mongo的id爲自增
且可以支持原有的高併發操作,
find_and_modify函數完成更新查找兩個操作
其是原子性的操作
代碼:(auto_id.py)
#coding:utf-8
import pymongo
client=pymongo.MongoClient('localhost',27017)#鏈接數據庫
#創建dbdb數據庫
db =client['dbdb']
#創建username_id集合
username_id = db['username_id']
#自增函數
def getNextValue(user_Name):
ret = username_id.find_and_modify({"_id": user_Name}, {"$inc": {"sequence_value": 1}}, safe=True, new=True)
new = ret["sequence_value"]
return new
if __name__=='__main__':
#插入username_id
username_id.insert_one(({'_id': "name", 'sequence_value': 0}))
代碼(username.py)
#coding:utf-8
import pymongo
from auto_id import getNextValue#導入自增函數
client=pymongo.MongoClient('localhost',27017)#鏈接數據庫
db =client['dbdb']
#創建user_name集合
user_name =db['user_name']
if __name__=='__main__':
list_name=['xiaoming','zhangsan','wangwu','lisi']
for n in list_name:
user_name.insert_one({'_id':getNextValue('name'),'myname':n})
for i in user_name.find():
print(i)
執行username.py之前一定要先運行auto_id.py
讓原始id爲0,這樣下次就從1開始。
切記住,auto_id.py 只需運行一次。
我們只需調用getNextValue函數,其便會自動增長。
結果:
{'_id': 1, 'myname': 'xiaoming'}
{'_id': 2, 'myname': 'zhangsan'}
{'_id': 3, 'myname': 'wangwu'}
{'_id': 4, 'myname': 'lisi'}
歡迎進(Q)羣,幫你解決問題: