pymongo实现id自增
问题
之前用sql都是有id自增长功能的,而现在的blog的数据库用的mongodb,系统生成的_id虽有唯一标识,但是并不适合用来做id,比如文章id等等。
思路1:
那么我这边一开始就利用代码自己让id自增。大概就是自己给设置一个id字段,在插入文档的时候搜寻出最后一篇文章的id,然后行+1的操作。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
# 找到最后一个id
preArticle_id = set1.find({}, {"article_id": 1}).sort("article_id", -1).limit(1)
# 先设置为0 用于第一次添加
Article_id = 0
for x in preArticle_id:
if x:
Article_id = x["article_id"]
这个方案对于个人网站网络请求的肯定是没问题。我手点再快也基本没问题。但是个人对于存在并发高的情况就有很大的疑惑了。之后我就在我的请求中直接循环5次请求,并且连点。之后果然出现了重复id,所以这方法对于高并发无法使用。
网上的方案(推荐)
然后看了一下网上的给出的代码,大概意思就是用一个另外的集合来查找并修改( find_and_modify )这个id并自增。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
def insert_doc(doc, collection):
doc['id'] = str(db.seqs.find_and_modify(
query={ 'collection' : collection },
update={'$inc': {'id': 1}},
fields={'id': 1, '_id': 0},
new=True
).get('id'))
这个方法记得在需要用时新建一个队列集合设置一个初始id 0
- 1
- 2
- 3
- 4
db.seqs.insert({
'collection' : 'blogs',
'id' : 0
})
下图是个人用循环测试并发的情况,这个方法的id是唯一的。
(完)
0条看法
最新最后最热
等待你的评论