简体   繁体   中英

update embedded documents of arrays of arrays object in mongodb

I have a following document

{
"_id" : ObjectId("5d3fd27b363f482cf67300b5"),
"is_active" : true,
"is_delete" : false,
"email" : "qwerty@adit.com",
"phone" : "1234567890",
"agencies" : [ 
    {
        "employees" : [ 
            ObjectId("5d3aeac1ea162253845ac7f8"), 
            ObjectId("5d3aeac1ea162253845ac7f9")
        ],
        "company_role" : [ 
            {
                "employees" : [ 
                    ObjectId("5d3aeac1ea162253845ac7f8"), 
                    ObjectId("5d3aeac1ea162253845ac7f9")
                ],
                "company" : ObjectId("5d3fd27b363f482cf67300b7"),
                "role" : "administrator"
            }, 
            {
                "employees" : [ 
                    ObjectId("5d3aeac1ea162253845ac7f8"), 
                    ObjectId("5d3aeac1ea162253845ac7f9")
                ],
                "company" : ObjectId("5d3fd27b363f482cf67300b8"),
                "role" : "administrator"
            }, 
            {
                "employees" : [ 
                    ObjectId("5d3aeac1ea162253845ac7f8"), 
                    ObjectId("5d3aeac1ea162253845ac7f9")
                ],
                "company" : ObjectId("5d3fd27b363f482cf67300b9"),
                "role" : "administrator"
            }, 
            {
                "employees" : [ 
                    ObjectId("5d3aeac1ea162253845ac7f8"), 
                    ObjectId("5d3aeac1ea162253845ac7f9")
                ],
                "company" : ObjectId("5d3fd27b363f482cf67300ba"),
                "role" : "administrator"
            }
        ],
        "agency" : ObjectId("5d3fd27b363f482cf67300b6")
    }
],
"createdAt" : ISODate("2019-07-30T05:15:39.345Z"),
"updatedAt" : ISODate("2019-07-30T05:15:39.451Z"),
"__v" : 0
}

I want to update the employees array based on the condition of the _id and agencies.agency. if employees exists then not add or else add it

I have tried as follows but it doesn't work for me

modelName.findOneAndUpdate({ ' _id': ObjectId("5d3fd27b363f482cf67300b5"), 'agencies.agency': ObjectId("5d3fd27b363f482cf67300b6") }, { $addToSet: { "agencies.$.employees": ObjectId("5d3aeac1ea162253845ac7f1"), "agencies.$.company_role.employees": ObjectId("5d3aeac1ea162253845ac7f1") } },{new:true})

I am using mongoose to update record

Two useful update operators you can use: $[< identifier > ] and $[] :

modelName.findOneAndUpdate({ '_id': ObjectId("5d3fd27b363f482cf67300b5") },
    { 
        $addToSet: { 
            "agencies.$[agency].employees": ObjectId("5d3aeac1ea162253845ac7f1"),
            "agencies.$[agency].company_role.$[].employees": ObjectId("5d3aeac1ea162253845ac7f1"),
        } 
    },
    {
        arrayFilters: [ { "agency.agency": ObjectId("5d3fd27b363f482cf67300b6") } ]
    })

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM