mongodb - 带有 $in的simd

  显示原文与译文双语对照的内容

我想在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}]

现在,我想用新的实体更新这个集合。 基本上,我将在 array 中准备新实体,如下所示:


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值都已经存在,这将不起作用,因为只能创建没有文档的新文档。

...