0

我正在尝试更新 MongoDB 中的文档,或者如果它们不存在则创建它们。例如(我正在使用带有节点的猫鼬,但我认为它在 MongoDB 中应该看起来非常相似)

some_model.update({some_field: { $in: ['foo1','foo2'] } ,
                  { $setOnInsert :  { bar : 'NEW'} },
                  { multi : true, upsert : true });

如果我的文档都不包含带有该元素值的 some_field,是否可以用上述数组的元素替换“NEW”,或者我需要为此运行多个查询?

4

1 回答 1

0

{upsert:true}当您为更新语句提供选项时,只能插入单个文档。由于在您的情况下您想要更新所有匹配的文档或为您测试的每个元素插入一个,您可以这样做:

使用元素列表运行您的常规更新,然后当您检查更新了多少文档时,如果它是 0,则迭代元素列表,为每个元素重新运行更新作为 upsert。这是为了使其线程安全,以防其他线程同时进行相同的更新。

于 2013-11-11T07:05:16.397 回答