簡體   English   中英

在MongoDB中的多個文檔中更新多個嵌入式文檔

[英]Update multiple embedded documents in multiple documents in MongoDB

我正在嘗試使用nodejs中的mongoose更新MongoDB中多個文檔中的多個嵌入式文檔。

該文檔的示例如下所示。

如您所見,在“ exampleDocument”中有一個嵌入式文檔: “ embededDoc”

let exampleDocument =  
    {   
        _id: '1aa',
        player_id: '9pp',
        docUpdated: false',
        embededDoc:
        [ 
            { 
            _id: '3eb',
            embededDocUpdated: false,
            timeDocWasSaved: '2019-04-30T08:45:50.349Z' 
            } 
        ],
    }

如何在多個 exampleDocument”文檔中更新多個嵌入式“ embededDoc 文檔。

借助此答案,我知道如何使用單個命令更新多個文檔,如下所示:

db.exampleDocument.update(
   { _id: { $in: ['1aa', '2bb', '3cc'] } },
   { $set: { docUpdated : yes } }
)

如果我想通過其ID更新多個嵌入文檔( embededDoc )怎么辦?

例如假設我們有三個“exampleDocument”與IDS文件:“1AA”,“2BB”,“3CC”。 每個文檔都有五個嵌入文檔,我想通過其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"
            }
        ]
    }]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM