Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更新多个嵌套/嵌入文档mongodb?_Mongodb_Nested_Document - Fatal编程技术网

如何更新多个嵌套/嵌入文档mongodb?

如何更新多个嵌套/嵌入文档mongodb?,mongodb,nested,document,Mongodb,Nested,Document,我只想知道更新所有嵌入的文档。这是我的文件: { "_id":1, "chat":[ { "sender":"bar", "message":"Hi", "status":"pending" }, { "sender":"bar", "message":"How are you?", "status":"pending" } } { "_id":2, "chat":[ { "sender":"foo", "message":"Hello", "status":"pending" }, { "se

我只想知道更新所有嵌入的文档。这是我的文件:

{
"_id":1,
"chat":[
{ "sender":"bar",
"message":"Hi",
"status":"pending"
},
{ "sender":"bar",
"message":"How are you?",
"status":"pending"
}
}
{
"_id":2,
"chat":[
{ "sender":"foo",
"message":"Hello",
"status":"pending"
},
{ "sender":"foo",
"message":"Are you okay?",
"status":"pending"
},
{ "sender":"someone",
"message":"Where are you?",
"status":"pending"
}
}
我试过了,但它不能同时工作,它只适用于更改第一个嵌入的文档。这是我的密码:

db.chat.update({"_id":"2", "chat.sender":"foo"},{$set{"chat.$.status":"sent"}},{multi:true})
我希望文档更新如下,并在1个过程中同时更改:

{
"_id":1,
"chat":[
{ "sender":"bar",
"message":"Hi",
"status":"pending"
},
{ "sender":"bar",
"message":"How are you?",
"status":"pending"
}
}
{
"_id":2,
"chat":[
{ "sender":"foo",
"message":"Hello",
"status":"sent"
},
{ "sender":"foo",
"message":"Are you okay?",
"status":"sent"
},
{ "sender":"someone",
"message":"Where are you?",
"status":"pending"
}
}

如果你知道如何解决这个问题,请帮我…

我想,你需要这个。试着这样,

db.chat.find({"_id":2,
    chat: {
        $exists: true
    }
}).forEach(function(myDoc) {
    var child = myDoc.chat;
    for (var i = 0; i < child.length; i++) {
        var ob = child[i];
        if (ob.sender == "foo") {
            ob.status = "sent";
            child[i] = ob;
        }
    }
    db.chat.update({
        _id: myDoc._id
    }, {
        $set: {
            chat: child
        }
    });
    });
db.chat.find({u id:2,
聊天:{
$exists:true
}
}).forEach(函数(myDoc){
var child=myDoc.chat;
对于(变量i=0;i
这就是您要找的

db.chat.find({ "_id":2 })
  .forEach(function (doc) {
    doc.chat.forEach(function (ch) {
      if (ch.sender === "foo") {
        ch.status="sent";
      }
    });
    db.chat.save(doc);
  });

Omg它可以工作,先生,但是如何在php中实现呢?db->chat->find(数组(“\u id”=>“2”))然后?不客气。对不起,关于PHP我帮不了你。在mongodb php库中必须有一种使用该查询的方法。@Hasan find条件应为:{“\u id”:2},使编辑成为ans。