I have a problem with upsert into nested array. My schema is:
new Schema({
itemId: { type: String, required: true, index: true, unique: true },
nestedItems: [{
nestedItemId: { type: String, required: true, index: true, unique: true },
nestedArray: [
{
id1: { type: String, required: true },
id2: { type: String, required: true },
booleanItem: { type: Boolean, required: true },
},
],
}],
})
I need to upsert nestedArray. For example:
{id1: "1", id2: "2", booleanItem: true}
will save
nestedArray: [{id1: "1", id2: "2", booleanItem: true}]
and then
{id1: "1", id2: "2", booleanItem: false}
update it to
nestedArray: [{id1: "1", id2: "2", booleanItem: false}]
etc..
Is it possible to do it in one db request?
I tried something, but it has not create new item
await Model.updateOne(
{
itemId,
},
{
$set: { 'nestedItems.$[nestedItem].nestedArray.$[nestedArrayItem].booleanItem': true },
},
{
arrayFilters: [{
'nestedItem.nestedItemId': 'nestedItemId',
}, {
'nestedArrayItem.id1': 'id1',
'nestedArrayItem.id2': 'id2',
}],
upsert: true,
}
)