我正在尝试更新MongoDB中的文档,或者如果它们不存在则创建它们。例如(我在节点中使用mongoose,但我认为它在MongoDB中应该看起来非常相似)
some_model.update({some_field: { $in: ['foo1','foo2'] } ,
{ $setOnInsert : { bar : 'NEW'} },
{ multi : true, upsert : true });
如果我的文档中没有包含some_field和该元素的值,或者我需要为此运行多个查询,是否可以用上面数组的元素替换'NEW'?
答案 0 :(得分:0)
只有在为update语句提供{upsert:true}
选项时才能插入单个文档。因为在您的情况下,您想要更新所有匹配的文档或为您测试的每个元素插入一个,您可以做的是:
使用元素列表运行常规更新,然后在检查更新了多少文档时,如果它为0,则迭代元素列表,重新运行每个元素的更新作为upsert。这是为了使其线程安全,以防其他线程同时进行相同的更新。