gpt4 book ai didi

mongodb - 用 $in 更新

转载 作者:可可西里 更新时间:2023-11-01 10:33:31 25 4
gpt4 key购买 nike

我想要 MongoDB 中的以下功能。我有一个名为“实体”的集合,它基本上存储实体文本并且它是计数的。该集合看起来像这样:

[{u'_id': u'facebook', u'n': 120},
{u'_id': u'florida', u'n': 98},
{u'_id': u'vegas', u'n': 94},
{u'_id': u'andrew_mason', u'n': 93},
{u'_id': u'obama', u'n': 85},
{u'_id': u'twitter', u'n': 81},
{u'_id': u'outlook', u'n': 81},
{u'_id': u'delhi', u'n': 75},
{u'_id': u'google', u'n': 74},
{u'_id': u'virginia', u'n': 71}]

现在,我想用新实体更新这个集合。基本上,我会像这样在数组中准备好新实体:

entitySet = ['google', 'Abhishek_Vaid', 'andrew_mason']

我的意图是,对于集合中已有的实体,它们的数量应该更新。至于集合中的实体,它们的计数应该初始化为1。我想使用单个MongoDB查询来实现这两种效果。到目前为止,我已经能够找到以下查询:(它具有 PyMongo 风格,但它仍然是一个 MongoDB 查询)

ENTITY_DB_HANDLE.entities.update (

{'_id' : {'$in' : entitySet} }, {'$inc' : {'n' : 1} }, upsert=True, multi=True )

但是,此查询仅更新现有实体计数,不会推送新实体。

对此有什么想法吗?

最佳答案

当然有用:

> db.test.save({_id:"a", n:3})
> db.test.update({_id:"b"}, {$inc:{n:1}}, true, false)
> db.test.find()
{ "_id" : "a", "n" : 3 }
{ "_id" : "b", "n" : 1 }

但是您的示例查询没有使用 $in,所以我假设您确实在尝试:

{'_id' : {$in:['google', 'Abhishek_Vaid', 'andrew_mason']}, {'$inc' : {'n' : 1} }, upsert=True, multi=True )

并期望它为您传递的每个 _id 值更新或创建一个条目。如果任何 _id 值已经存在,这将不起作用,因为 upsert 只会创建一个没有文档匹配搜索条件的新文档。

关于mongodb - 用 $in 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15198336/

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