MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Aggiorna l'elemento dell'array nidificato in mongodb

Un paio di rettifiche richieste sulla query, altrimenti è quasi arrivata. L'aggiornamento non funziona perché $elemMatch per attributeSet (array di documenti) deve essere visualizzato su id proprietà di tali documenti da filtrare e non su attributeSet.id , non capirebbe cosa sia. E elemMatch nidificato non è richiesto, usa semplicemente la notazione del punto .

Per eseguire il debug puoi provarlo con una query di ricerca.

Query (shell):

db.collection.findOneAndUpdate(
  {
    _id: settingsToBeUpdated._id,
    attributeSet: {
      $elemMatch: {
        id: attributeSetId,
        "attributes.id": id
      }
    }
  },
  {
    $set: {
      "attributeSet.$[as].attributes.$[a].attributeName":
        attributeDto.attributeName,
      "attributeSet.$[as].attributes.$[a].defaultValue":
        attributeDto.defaultValue,
      "attributeSet.$[as].attributes.$[a].isRequired": attributeDto.isRequired
    }
  },
  {
    arrayFilters: [{ "as.id": attributeSetId }, { "a.id": id }],
    returnNewDocument: true
  }
);