MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Aktualisieren Sie das verschachtelte Array-Element in mongodb

Bei der Abfrage sind einige Korrekturen erforderlich, sonst ist es fast da. Das Update funktioniert nicht, weil $elemMatch für attributeSet (array of docs) Feld soll auf id geschehen Eigenschaft dieser zu filternden Dokumente und nicht auf attributeSet.id , es würde nicht herausfinden, was es ist. Und verschachteltes elemMatch ist nicht erforderlich, verwenden Sie einfach die Punktnotation .

Zum Debuggen können Sie es mit einer Suchabfrage ausprobieren.

Abfrage (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
  }
);