簡體   English   中英

多條件的MongoDB插入

[英]Mongodb insert with multiple conditions

我在一個集合中有多個文檔,每個文檔都有這個數據結構:

{
    _id: "some object id",
    data1: [
        {
            data2_id : 13233,
            data2: [
                {
                    sub_data1: "text1",
                    sub_data2: "text2",
                    sub_data3: "text3",

                },
                {
                    sub_data1: "text4",
                    sub_data2: "text5",
                    sub_data3: "text6",
                }
            ]
        },
        {
            data2_id : 53233,
            data2: [
                {
                    sub_data1: "text4",
                    sub_data2: "text5",
                    sub_data3: "text6",

                }
               ...
            ]
        },
        {
            data2_id : 56233,
            data2: [
                {
                    sub_data1: "text7",
                    sub_data2: "text8",
                    sub_data3: "text9",

                }
                 ...
            ]
        },
        {
            data2_id : 53236,
            data2: [
                {
                    sub_data1: "text10",
                    sub_data2: "text22",
                    sub_data3: "text33",

                }
                ...
            ]
        }
    ]
}

我想更新一組符合某些條件的 id,只更新文檔中的子對象。

我試過這個:

db.collection.update({
    "$and": [
        {
            "_id": {
                "$in": [
                    {
                        "$id": "54369aca9bc25af3ca8b4568"
                    },
                    {
                        "$id": "54369aca9bc25af3ca8b4562"
                    }
                ]
            }
        },
        {
            "data1.data2": {
                "$elemMatch": {
                    "sub_data1": "text4",
                    "sub_data2": "text5"
                }
            }
        }
    ]
},
{
   "data1.data2.$.sub_data3" : "text updated"
}
)

但我收到以下錯誤:

將數據更新到 MongoDB 失敗:dev.**.com:27017: 無法使用部分(data1.data2.0.sub_data3 的數據2)遍歷元素...

有任何想法嗎?

這里有一個未解決的問題,在嘗試更新嵌套在另一個數組中的數組元素時會施加限制。

此外,您可以在此處進行一些改進:

  1. 對於您的查詢,您不需要 $and
    db.collection.update(
    {
      "_id": {
        "$in": [
          {"$id": "54369aca9bc25af3ca8b4568"},
          {"$id": "54369aca9bc25af3ca8b4562"}
        ]},
      "data1.data2": {
        "$elemMatch": {
          "sub_data1": "text4",
          "sub_data2": "text5"
        }
    },{..update...})
  1. 您可能想使用 $set:
    db.collection.update(query,{ $set:{"name": "Mike"} })

否則,您可能會丟失文檔中的其余數據。

暫無
暫無

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

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