pymongo实现id自增

Snipaste_20220805_140001.jpg

问题

之前用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,所以这方法对于高并发无法使用。

Snipaste_20220805_091037.jpg

网上的方案(推荐)

然后看了一下网上的给出的代码,大概意思就是用一个另外的集合来查找并修改( 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是唯一的。

Snipaste_20220805_091745.jpg

(完)
简单尝试下Xray
直接使用一键安装脚本了
pymongo实现id自增
新增一个记录id的文档,然后使用find_and_modify实现
爆火的“闻神”
“闻神”,“闻会军”,“利安闻会军驾驶员服务部”
Qv2ray安装和使用
膜拜大神们
chatGPT
简单谈谈chatGPT和对写代码运用
浅拷贝深拷贝
前端基本技能,面试必备
等待你的评论