gpt4 book ai didi

python - 动态更新 mongodb

转载 作者:行者123 更新时间:2023-11-30 23:11:32 24 4
gpt4 key购买 nike

我有一个 mongodb 数据库,它存储如下值:

{'_id':1, "summary":{"tags": {"Good":1, "bad": 4}}}

我想让我可以输入任何新标签并更新现有标签的计数。

就像:

db = pymongo.MongoClient().collection.summary
tags = ['Good', 'Enjoy']
id_tags =db.find_one({'_id':1})[summary][tags].keys()
for i in tags:
if i in id_tags:
db.update('_id':1, {"$inc":{'summary.tags.{}'.format(i):1})
else:
db.update('_id':1,{"$set":{'summary.tags.{}'.format(i):1}})

有没有一种方法可以让我只用一个 mongodb 命令动态地执行此操作?即我不必处理 if else 条件?理想情况下,我实际上想摆脱这里的 for 语句,因为我还在更新 mongodb 中的其他内容,并且这些内容不需要循环。

最佳答案

根据文档,$inc运算符将字段增加指定值,并具有以下形式:

{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }

如果该字段不存在,$inc创建字段并将该字段设置为指定值。因此,在您的情况下,for 循环变得不必要,因为您只需要使用 $inc 进行一次原子更新。在多个字段上设置的运算符:

db = pymongo.MongoClient().collection.summary
db.update_one({'_id': 1},
{
'$inc': {
'summary.tags.Good' : 1,
'summary.tags.Enjoy': 1
}
})

-- 更新 --

要动态更新键,您需要首先创建一个保存键和增量值的字典:

tags = ['Good', 'Enjoy']
tags_dict = {}
for tag in tags:
tags_dict['summary.tags.'+tag] = 1
db = pymongo.MongoClient().collection.summary
db.update_one({'_id': 1}, {'$inc': tags_dict })

关于python - 动态更新 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30148054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com