MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Atualizar elemento de matriz aninhada no mongodb


Par de retificação necessária na consulta, caso contrário, está quase lá. A atualização não está funcionando porque $elemMatch para attributeSet (array of docs) deve acontecer em id propriedade desses documentos para filtrar e não em attributeSet.id , não iria descobrir o que é. E elemMatch aninhado não é necessário, basta usar notação de ponto .

Para depurar, você pode experimentá-lo com uma consulta de localização.

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