如何在数组 MongoDB Aggregate 中更新或插入数组对象

问题描述 投票:0回答:0

更新或插入对象:

{
"Id" : NumberInt(1190001),
"TypeNo" : NumberInt(2),
"HS" : NumberInt(9),
"AS" : NumberInt(9)
},

如果存在 Id=1190001 且 TypeNo = 2,我想更新 Results 数组元素,否则将新元素插入 Id=1190001 且 TypeNo = 2 的数组中。

可能有多个文档属于此结果数组。所有文件都必须受到影响。

{
    "_id" : ObjectId("64ba3c55b9e000058c561224"),
    "FData" : {
        //otherproperties,
        "IC" : {
            //otherproperties,
            "iEv" : [
                {
                    //otherproperties,
                    "nev" : NumberInt(1169644),
                    "Results" : [
                        {
                            "Id" : NumberInt(1169644),
                            "TypeNo" : NumberInt(2),
                            "HS" : NumberInt(3),
                            "AS" : NumberInt(0)
                        },
                        {
                            "Id" : NumberInt(1169644),
                            "TypeNo" : NumberInt(1),
                            "HS" : NumberInt(3),
                            "AS" : NumberInt(0)
                        }
                    ],
                },
                {
                    //otherproperties,
                    "nev" : NumberInt(1190001),
                    "Results" : [
                        {
                            "Id" : NumberInt(1190001),
                            "TypeNo" : NumberInt(1),
                            "HS" : NumberInt(0),
                            "AS" : NumberInt(1)
                        },
                        {
                            "Id" : NumberInt(1190001),
                            "TypeNo" : NumberInt(2),
                            "HS" : NumberInt(1),
                            "AS" : NumberInt(1)
                        }
                    ]
                }
            ]
        }
    }
}
{
"Id" : NumberInt(1190001),
"TypeNo" : NumberInt(2),
"HS" : NumberInt(9),
"AS" : NumberInt(9)
},

条件1预期结果

{
    "_id" : ObjectId("64ba3c55b9e000058c561224"),
    "FData" : {
        //otherproperties,
        "IC" : {
            //otherproperties,
            "iEv" : [
                {
                    //otherproperties,
                    "nev" : NumberInt(1169644),
                    "Results" : [
                        {
                            "Id" : NumberInt(1169644),
                            "TypeNo" : NumberInt(2),
                            "HS" : NumberInt(3),
                            "AS" : NumberInt(0)
                        },
                        {
                            "Id" : NumberInt(1169644),
                            "TypeNo" : NumberInt(1),
                            "HS" : NumberInt(3),
                            "AS" : NumberInt(0)
                        }
                    ],
                },
                {
                    //otherproperties,
                    "nev" : NumberInt(1190001),
                    "Results" : [
                        {
                            "Id" : NumberInt(1190001),
                            "TypeNo" : NumberInt(1),
                            "HS" : NumberInt(0),
                            "AS" : NumberInt(1)
                        },
                        {
                            "Id" : NumberInt(1190001),
                            "TypeNo" : NumberInt(2),
                            "HS" : NumberInt(9), //modified
                            "AS" : NumberInt(9)  //modified
                        }
                    ]
                }
            ]
        }
    }
}

更新或插入对象:

{
"Id" : NumberInt(1190001),
"TypeNo" : NumberInt(3),
"HS" : NumberInt(11),
"AS" : NumberInt(11)
},

条件2预期结果

{
    "_id" : ObjectId("64ba3c55b9e000058c561224"),
    "FData" : {
        //otherproperties,
        "IC" : {
            //otherproperties,
            "iEv" : [
                {
                    //otherproperties,
                    "nev" : NumberInt(1169644),
                    "Results" : [
                        {
                            "Id" : NumberInt(1169644),
                            "TypeNo" : NumberInt(2),
                            "HS" : NumberInt(3),
                            "AS" : NumberInt(0)
                        },
                        {
                            "Id" : NumberInt(1169644),
                            "TypeNo" : NumberInt(1),
                            "HS" : NumberInt(3),
                            "AS" : NumberInt(0)
                        }
                    ],
                },
                {
                    //otherproperties,
                    "nev" : NumberInt(1190001),
                    "Results" : [
                        {
                            "Id" : NumberInt(1190001),
                            "TypeNo" : NumberInt(1),
                            "HS" : NumberInt(0),
                            "AS" : NumberInt(1)
                        },
                        {
                            "Id" : NumberInt(1190001),
                            "TypeNo" : NumberInt(2),
                            "HS" : NumberInt(1), 
                            "AS" : NumberInt(1)  
                        },
                         //Inserted new element
                        {
                            "Id" : NumberInt(1190001),
                            "TypeNo" : NumberInt(3),
                            "HS" : NumberInt(11),
                            "AS" : NumberInt(11)
                        },
                         //Inserted new element
                    ]
                }
            ]
        }
    }
}
arrays mongodb mongodb-query aggregation-framework
© www.soinside.com 2019 - 2024. All rights reserved.