1
我想更新少数文档中的特定字段,但不想插入该字段,如果它不存在于任何文档中。举例来说,如果我有以下三个文件在收集“测试”:MongoDB:更新多个文档,但不要插入
{
Name: "abc",
Age: 10,
Hits: 1,
Score: 100
},
{
Name: "def",
Age: 20,
Hits: 1,
Score: 50
},
{
Name: "ghi",
Age: 30,
Score: 100
}
我已经试过此命令:
db.test.update({},{$set:{Hits:2}},{multi:true,upsert:false})
这里是输出:
{
Name: "abc",
Age: 10,
Hits: 2,
Score: 100
},
{
Name: "def",
Age: 20,
Hits: 2,
Score: 50
},
{
Name: "ghi",
Age: 30,
Score: 100,
Hits: 2
}
我的预期输出是:
{
Name: "abc",
Age: 10,
Hits: 2,
Score: 100
},
{
Name: "def",
Age: 20,
Hits: 2,
Score: 50
},
{
Name: "ghi",
Age: 30,
Score: 100
}
Ba从根本上说,我不希望名为“ghi”的第三个文档具有“Hits”字段。 请让我知道你的想法。 谢谢。
由于秸秆。它有助于解决问题。但是,我不明白为什么“upsert:false”在这里没有帮助。理想情况下,upsert:false应该会得心应手。现在,即使我们删除“upsert:false”,输出也不会改变。不是吗? – Vam
[upsert:false](http://docs.mongodb.org/manual/reference/method/db.collection.update/)只是说明如果没有文档匹配我们的过滤器,mongodb不应创建新文档。但是我们在这里使用['$ set'](http://docs.mongodb.org/manual/reference/operator/update/set/),它不会创建文档,而是更新它。我认为,如果使用'$ set'选项,'upsert'不是必需的。 – stalk
好吧..我试图复制Mongodb.org网站的例子。这里他们使用MULTI&UPSERT,同时使用$ set更新。我从该网站复制了以下行:以下操作同时指定了多选项和upsert选项。如果存在匹配的文档,则操作会更新所有匹配的文档。如果不存在匹配的文档,则该操作将插入一个新文档。 db.books.update( {item:“EFG222”}, {$ set:{reorder:false,tags:[“literature”,“translated”]}}, {upsert:true,multi:true } ) – Vam