如何更新多个 nested/embedded 文档 mongodb?
How to update multiple nested/embedded document mongodb?
我只想知道更新所有嵌入的文档。这是我的文档:
{
"_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({ "_id":2 })
.forEach(function (doc) {
doc.chat.forEach(function (ch) {
if (ch.sender === "foo") {
ch.status="sent";
}
});
db.chat.save(doc);
});
我只想知道更新所有嵌入的文档。这是我的文档:
{
"_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({ "_id":2 })
.forEach(function (doc) {
doc.chat.forEach(function (ch) {
if (ch.sender === "foo") {
ch.status="sent";
}
});
db.chat.save(doc);
});