0

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,
  }
)
    
Nikol
  • 1
  • 1

0 Answers0