自动增量 pymongo

Posted

技术标签:

【中文标题】自动增量 pymongo【英文标题】:Auto increment pymongo 【发布时间】:2022-01-06 21:55:32 【问题描述】:

我正在尝试在我的 mongo 集合中自动增加一个字段。该字段是一个“id”字段,它包含每个文档的“id”。例如。 1、2、3等

我想要发生的是插入一个新文档并从最后一个文档中获取“id”并将其加 1,以便新文档为 lastID + 1。

我编写代码的方式使它能够获取最后一个文档并将1添加到最后一个文档然后更新它。因此,如果最后一个 id 是 5,那么新文档将具有 5,而我正在递增的文档现在具有新的 'id' 6。

我不确定如何解决这个问题,因此我们将不胜感激。

代码

last_id = pokemons.find_one(, sort=[( 'id', -1)])

last_pokemon = pokemons.find_one_and_update('id' : last_id['id'], '$inc': 'id': 1, sort=[( 'id', -1)]) 

new_pokemon = 
              "name" : name, "avg_spawns" : avg_spawns, "candy" : candy, "img" : img_link, "weaknesses" : [], "type" : [], "candy_count" : candy_count, 
              "egg" : egg, "height" : height, "multipliers" : [], "next_evolution" : [], "prev_evolution" : [],
              "spawn_chance" : spawn_chance, "spawn_time" : spawn_time, "weight" : weight, "id" : last_pokemon['id'], "num" : last_pokemon['id'],


pokemons.insert_one(new_pokemon)
                 

new_pokemon 中的变量无关紧要,因为我只是对 last_pokemon 部分有问题

【问题讨论】:

【参考方案1】:

MongoDB 命令中的find_one 命令不支持排序功能。您必须使用将限制参数设置为1 的普通查找命令。

last_id = pokemons.find(, "id": 1, sort=[('id', -1)]).limit(1).next()  # Will error if there are no documents in collection due to the usage of `next()`

last_id["id"] += 1

new_pokemon = 
              "name" : name, "avg_spawns" : avg_spawns, "candy" : candy, "img" : img_link, "weaknesses" : [], "type" : [], "candy_count" : candy_count, 
              "egg" : egg, "height" : height, "multipliers" : [], "next_evolution" : [], "prev_evolution" : [],
              "spawn_chance" : spawn_chance, "spawn_time" : spawn_time, "weight" : weight, "id" : last_id['id'], "num" : last_id['id'],


pokemons.insert_one(new_pokemon)

【讨论】:

我得到的结果与我原来的方式相同。集合中的最后一个将不断更新,而不是使用 lastid + 1 分配新的口袋妖怪 @Darren_D19 对不起,我误解了你的问题。我已经更新了答案,请检查是否是您要查找的内容。

以上是关于自动增量 pymongo的主要内容,如果未能解决你的问题,请参考以下文章

修复自动增量mysql [重复]

Oracle 包中的自动增量

egret(旧版本)自动增量编译

将自动增量 ID 添加到现有的升序列?

如何进行MongoDB自动备份增量备份和恢复

Firestore 和自动增量 ID