Node.js 更新MongoDB中多个文档中的多个嵌入文档
我正在尝试使用nodejs中的mongoose更新MongoDB中多个文档中的多个嵌入文档 该文件的示例如下所示 如您所见,在“exampleDocument”中有一个嵌入式文档:“EmbeddedDoc” 如何在多个“exampleDocument”文档中更新多个嵌入的“EmbeddedDoc”文档 在的帮助下,我知道如何使用一个命令更新多个文档,如下所示:Node.js 更新MongoDB中多个文档中的多个嵌入文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在尝试使用nodejs中的mongoose更新MongoDB中多个文档中的多个嵌入文档 该文件的示例如下所示 如您所见,在“exampleDocument”中有一个嵌入式文档:“EmbeddedDoc” 如何在多个“exampleDocument”文档中更新多个嵌入的“EmbeddedDoc”文档 在的帮助下,我知道如何使用一个命令更新多个文档,如下所示: db.exampleDocument.update( { _id: { $in: ['1aa', '2bb', '3cc'] }
db.exampleDocument.update(
{ _id: { $in: ['1aa', '2bb', '3cc'] } },
{ $set: { docUpdated : yes } }
)
如果我想通过它们的ID更新几个嵌入文档(EmbeddedDoc),该怎么办
例如,假设我们有三个ID为“1aa”、“2bb”、“3cc”的“exampleDocument”文档。每个文档都有五个嵌入的文档,我想用它们的ID更新一些嵌入的文档。。。是可以用一个命令来做,还是我必须一个文档一个文档地做
如果可能的话,我将非常感谢您提供一个代码示例和答案,谢谢。试试这个
db.collection.update(
{ "embededDoc._id": "3eb" },
{ $set: { "embededDoc.$.embededDocUpdated" :true } }
)
您必须使用过滤的位置更新操作符
$[elem]
,尝试以下解决方案,我已使用下面给出的一些示例文档对其进行了测试:
解决方案:
db.test.update({
_id: {
$in: ['1aa', '1bb', '1cc']
}
}, {
$set: {
"embededDoc.$[elem].embededDocUpdated": true,
"docUpdated" : "yes"
}
}, { arrayFilters: [{"elem._id": {$in: ['3ed',"3eg","3eb","3eh"]}}], multi: true})
[{
"_id" : "1cc",
"player_id" : "9pp",
"docUpdated" : false,
"embededDoc" : [
{
"_id" : "3ed",
"embededDocUpdated" : false,
"timeDocWasSaved" : "2019-04-30T08:45:50.349Z"
},
{
"_id" : "3eh",
"embededDocUpdated" : false,
"timeDocWasSaved" : "2019-04-30T08:45:50.349Z"
}
]
},
{
"_id" : "1bb",
"player_id" : "9pp",
"docUpdated" : false,
"embededDoc" : [
{
"_id" : "3ec",
"embededDocUpdated" : false,
"timeDocWasSaved" : "2019-04-30T08:45:50.349Z"
},
{
"_id" : "3eg",
"embededDocUpdated" : false,
"timeDocWasSaved" : "2019-04-30T08:45:50.349Z",
}
]
},
{
"_id" : "1aa",
"player_id" : "9pp",
"docUpdated" : false,
"embededDoc" : [
{
"_id" : "3eb",
"embededDocUpdated" : false,
"timeDocWasSaved" : "2019-04-30T08:45:50.349Z",
},
{
"_id" : "3ef",
"embededDocUpdated" : false,
"timeDocWasSaved" : "2019-04-30T08:45:50.349Z"
}
]
}]
我已经用下面的示例文档测试了上述查询,并且它的工作情况与您所希望的一样好:
db.test.update({
_id: {
$in: ['1aa', '1bb', '1cc']
}
}, {
$set: {
"embededDoc.$[elem].embededDocUpdated": true,
"docUpdated" : "yes"
}
}, { arrayFilters: [{"elem._id": {$in: ['3ed',"3eg","3eb","3eh"]}}], multi: true})
[{
"_id" : "1cc",
"player_id" : "9pp",
"docUpdated" : false,
"embededDoc" : [
{
"_id" : "3ed",
"embededDocUpdated" : false,
"timeDocWasSaved" : "2019-04-30T08:45:50.349Z"
},
{
"_id" : "3eh",
"embededDocUpdated" : false,
"timeDocWasSaved" : "2019-04-30T08:45:50.349Z"
}
]
},
{
"_id" : "1bb",
"player_id" : "9pp",
"docUpdated" : false,
"embededDoc" : [
{
"_id" : "3ec",
"embededDocUpdated" : false,
"timeDocWasSaved" : "2019-04-30T08:45:50.349Z"
},
{
"_id" : "3eg",
"embededDocUpdated" : false,
"timeDocWasSaved" : "2019-04-30T08:45:50.349Z",
}
]
},
{
"_id" : "1aa",
"player_id" : "9pp",
"docUpdated" : false,
"embededDoc" : [
{
"_id" : "3eb",
"embededDocUpdated" : false,
"timeDocWasSaved" : "2019-04-30T08:45:50.349Z",
},
{
"_id" : "3ef",
"embededDocUpdated" : false,
"timeDocWasSaved" : "2019-04-30T08:45:50.349Z"
}
]
}]
谢谢,但这并不能回答问题。我正在尝试更新在多个文档中找到的多个嵌套文档。您能否为此提供正确的文档?您是否正在尝试更新where条件下所有文档的
embeddedDocUpdated
?是的,我正在尝试更新embeddedDocUpdated,但不是所有文档,我正在尝试通过其ID更新它们…更新答案。如果您不想更新多个文档,则可以使用updateMany
<代码>$是数组更新运算符https://docs.mongodb.com/manual/reference/operator/update/positional/
刚刚在mongoDB终端上测试过。。。它就像一个符咒。。。非常感谢。嘿:)请退房。非常感谢。