在不删除的情况下更新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'的文档。但我无法实现它。
如何做到这一点?

+1

向我们展示你已经尝试了什么,发生了什么和在那里你就完蛋了。 –

+1

此外,请查看文档:https://docs.mongodb.com/php-library/current/tutorial/crud/#update-one-document –

+0

我已阅读此文档。但是,据我所知,我只能替换一个文件,但不是我需要的全部文件(例如,一个查询中有3个文件)。我对吗? –

在蒙戈更新文件的基本语法是

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"} } 
>    } 
>   }, 
>  ]  
>); 
+0

是的,我可以在3个查询中实现它,但我想要在一个查询中完成。你可以帮我吗? –

+0

O,谢谢!另外我还有一个问题。据我从文档中了解到,多次替换对新的mongoDB驱动程序是严格的?所以我也不能在一个查询中使用$ pull/$ push for php? –

+0

你不能在同一个查询中使用两个,因为我知道..但我不确定。 此外,如果这个答案帮助你,然后请将其标记为正确的答案。 –