Json 具有多个条件的Mongodb插入

Json 具有多个条件的Mongodb插入,json,mongodb,updates,mongodb-query,Json,Mongodb,Updates,Mongodb Query,我在一个集合中有多个文档,每个文档都有以下数据结构: { _id: "some object id", data1: [ { data2_id : 13233, data2: [ { sub_data1: "text1", sub_data2: "text2", su

我在一个集合中有多个文档,每个文档都有以下数据结构:

{
    _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的data2)遍历元素

有什么想法吗?

在尝试更新嵌套在另一个数组中的数组元素时,存在一个未解决的问题

此外,您还可以在此处进行一些改进:

  • 对于您的查询,您实际上不需要$and

    db.collection.update( { “_id”:{ “$in”:[ {“$id”:“54369aca9bc25af3ca8b4568”}, {“$id”:“54369aca9bc25af3ca8b4562”} ]}, “data1.data2”:{ “$elemMatch”:{ “sub_数据1”:“text4”, “sub_数据2”:“text5” } },{..更新…})

  • 您可能希望使用$set:

    update(查询,{$set:{“name”:“Mike”})


  • 否则,您可能会丢失文档中的其余数据。

    update position操作符
    $
    无法支持嵌套数组。这意味着
    data1.$.data2
    是可以接受的,但不是
    data1.data2.$
    。我发现有多个
    data2
    作为
    data1
    的元素满足查询条件o此位置运算符
    $
    不适合在此处使用,因为它只定位在第一位,而忽略其他位置。我认为您必须在更新之前从查询中获取整个
    数据1
    。最终我修改了数据,然后将其保存。这是在当前mdb版本中执行此操作的唯一方法。