sql >> Databáze >  >> NoSQL >> MongoDB

Aktualizujte prvek vnořeného pole v mongodb

V dotazu je potřeba pár oprav, jinak je to skoro tam. Aktualizace nefunguje, protože $elemMatch pro attributeSet (pole dokumentů) se má stát na id vlastnost těchto dokumentů filtrovat a nikoli na attributeSet.id , nepřišlo by na to, co to je. A vnořený elemMatch není vyžadován, stačí použít tečkovou notaci .

Chcete-li ladit, můžete to vyzkoušet pomocí vyhledávacího dotazu.

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



  1. MongoDB načte pouze odpovídající dílčí dokumenty z dokumentu s c#

  2. Jak zkopírovat kolekci z jedné databáze do druhé v MongoDB

  3. Agregace MongoDB:přidejte pole z vloženého dokumentu prostřednictvím cesty dynamického pole

  4. Mongo třídí podle vypočítané podmínky