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

Aktualizace dílčího dokumentu Mongoose, pokud existuje

Takže jste součástí cesty tam, ale samozřejmě když nenajdete doc pak nebudete mít doc pracovat při zpětném volání. MongoDB má nativní způsoby zpracování těchto druhů aktualizací, ale samozřejmě musíte otestovat shodu jako vy.

Co zde můžeme udělat, je pracovat v rámci true nebo false stav, kde dokument existuje.

S ohledem na vote.value aby byl váš true nebo false pro "hlas"

Pokud zjistíte, že existuje odpovídající dokument, můžete vydat aktualizaci takto:

Question.update(
  { 
    _id: questionId, 
    "votes.createdBy" vote.createdBy,
    "votes.up": {"$ne": vote.value }
  },
  { $set: { "votes.$.up": vote.value } }
);

Takže to odpovídá a používá poziční $ operátora, abyste se ujistili o správném indexu odpovídající položky se aktualizuje. To, co jsem tam přidal, zajišťuje, že se ani nedotknete dokumentu, kde je vote.vaule má již stejnou hodnotu.

A ve falešném stavu chcete $push do pole s novým položka:

Question.update(
  { 
    _id: questionId
  },
  { 
    $push: { 
      "votes": {
        "up": vote.value,
        "createdBy": vote.createdBy
      }
    }
  }
);

Samozřejmě přidejte podrobnosti zpětného volání do writeConcern je použito, což pravděpodobně děláte.




  1. jak použít naplnit a agregovat ve stejném prohlášení?

  2. Odeberte vložený dokument z vnořeného pole dokumentů

  3. Dotaz pokrytý MongoDB není schopen uspokojit dotaz z Indexu

  4. Morphia/MongoDB:Přístup k vloženému objektu z @Embedded objektu