Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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
Node.js 更新MongoDB中多个文档中的多个嵌入文档_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 更新MongoDB中多个文档中的多个嵌入文档

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'] }

我正在尝试使用nodejs中的mongoose更新MongoDB中多个文档中的多个嵌入文档

该文件的示例如下所示

如您所见,在“exampleDocument”中有一个嵌入式文档:“EmbeddedDoc”

如何在多个“exampleDocument”文档中更新多个嵌入的“EmbeddedDoc”文档

在的帮助下,我知道如何使用一个命令更新多个文档,如下所示:

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终端上测试过。。。它就像一个符咒。。。非常感谢。嘿:)请退房。非常感谢。