【发布时间】:2021-11-12 21:40:54
【问题描述】:
我想将多个Tags 的给定数组中每个Tag 的标记号加1。
我指定Tag 可能不存在,因此当它不存在时,我需要创建“标签”字段,并为数组中的每个单独标签提供正确的值(此处为json["tags"])。
我想用 MongoDB 在一个查询中执行此操作,如下所示:
tags_collection.update_many(
{
"tag": {"$in": json["tags"]},
},
{
"$set": {"tag": "<value of the tag found>"},
"$inc": {"num": 1}
},
upsert=True
)
我只是想避免带有许多 update_one 的 for 循环,这当然可以工作,但在我的情况下会进行 50 次查询...
编辑:
假设我按照评论中的建议将上述查询拆分为 2 个查询:
tags_collection.update_many({"tag": {"$in": json["tags"]}}, {"$inc": {"num": 1}})
和:
tags_collection.update_many({"tag": {"$exists": False}}, {"$set": {"tag": "<value of the tag found>"}}, upsert=True)
那么问题来了:
- 我怎么知道
<value of the tag found>?换句话说,我如何在一个请求中创建包含第一次查询未更新的所有标签的新文档?
如果可能的话,我想避免先读取数据库,但如果我别无选择,我会这样做。
【问题讨论】: