在不删除的情况下更新MongoDB集合中的某些文档
我是mongoDB中的新成员,所以我需要一些帮助。
我有一个备份集合。它包含以下数据文件:在不删除的情况下更新MongoDB集合中的某些文档
{
"_id" : ObjectId("59f18942e7798954dc373b67"),
"category" : "building",
},
{
"_id" : ObjectId("59f18942e7798954dc373b68"),
"category" : "building",
},
{
"_id" : ObjectId("59f18942e7798954dc373b69"),
"category" : "tree",
"type" : 18,
},
{
"_id" : ObjectId("59f18942e7798954dc373b70"),
"category" : "book",
"type" : 18,
}
然后,例如,某些对象发生了变化,成为这样的:
{
"_id" : ObjectId("59f18942e7798954dc373b67"),
"category" : "building",
"size" : 100
},
{
"_id" : ObjectId("59f18942e7798954dc373b68"),
"category" : "building",
"size" : 400
},
{
"_id" : ObjectId("59f18942e7798954dc373b70"),
"category" : "book",
"type" : 18,
"title" : "New"
}
所以我需要在我的数据库更新它们。正如我所理解的那样,请替换。我已阅读关于使用'upsert'和'multi'的文档。但我无法实现它。
如何做到这一点?
在蒙戈更新文件的基本语法是
db.collection.update(query,update,options);
对于你的问题,
1. db.collection.update({_id: ObjectId("59f18942e7798954dc373b67")},{$set:{size:100}});
2. db.collection.update({_id: ObjectId("59f18942e7798954dc373b68")},{$set:{size:400}});
3. db.collection.update({_id: ObjectId("59f18942e7798954dc373b70")},{$set:{title:"New"}});
编辑:
你可以试试这个,如果你想在一个命令执行写操作:
> db.characters.bulkWrite(
> [
> { updateOne :
> {
> "filter" : { _id : ObjectId("59f18942e7798954dc373b67") },
> "update" : { $set : { size : 100 } }
> }
> },
> { updateOne :
> {
> "filter" : { _id : ObjectId("59f18942e7798954dc373b68") },
> "update" : { $set : { size : 400 } }
> }
> },
> { updateOne :
> {
> "filter" : { _id : ObjectId("59f18942e7798954dc373b68") },
> "update" : { $set: { title: "New"} }
> }
> },
> ]
>);
是的,我可以在3个查询中实现它,但我想要在一个查询中完成。你可以帮我吗? –
O,谢谢!另外我还有一个问题。据我从文档中了解到,多次替换对新的mongoDB驱动程序是严格的?所以我也不能在一个查询中使用$ pull/$ push for php? –
你不能在同一个查询中使用两个,因为我知道..但我不确定。 此外,如果这个答案帮助你,然后请将其标记为正确的答案。 –
向我们展示你已经尝试了什么,发生了什么和在那里你就完蛋了。 –
此外,请查看文档:https://docs.mongodb.com/php-library/current/tutorial/crud/#update-one-document –
我已阅读此文档。但是,据我所知,我只能替换一个文件,但不是我需要的全部文件(例如,一个查询中有3个文件)。我对吗? –