Reputation: 941
I have a following document
{
"_id" : ObjectId("5d3fd27b363f482cf67300b5"),
"is_active" : true,
"is_delete" : false,
"email" : "[email protected]",
"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
Upvotes: 1
Views: 46
Reputation: 49985
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") } ]
})
Upvotes: 1