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

Vrhněte prostý objekt do dokumentu mongoose

Zveřejňuji vlastní odpověď, aby to nezůstalo otevřené:

Modely verze 4 (stabilní vydané 2015-03-25) nyní odhalují hydrate() metoda. Žádné z polí nebude označeno jako špinavé zpočátku, což znamená volání save() neudělá nic, dokud nebude pole zmutováno.

/Goosegit /blob/41ea6010c4a84716aec7a5798c7c35ef21aa294f/lib/model.js#L1639-1657

Je velmi důležité poznamenat, že toto je určeno pro převod prostého JS objektu načteného z databáze na mongoose dokument. Pokud přijímáte dokument ze služby REST nebo něčeho podobného, ​​měli byste použít findById() a update() .

Pro ty, kteří žijí nebezpečně:

Pokud opravdu chcete aktualizovat existující dokument, aniž byste se dotkli databáze, předpokládám, že byste mohli zavolat hydrate() , označte pole jako špinavá a pak zavolejte save() . To se příliš neliší od metody nastavení doc.isNew = false; jak jsem navrhoval ve své původní otázce. Valeri (z týmu mongoose) však navrhl, aby to nedělal. Mohlo by to způsobit chyby ověření a další problémy s okrajovými případy a obecně to není dobrá praxe. findById je opravdu rychlý a nebude vaším úzkým hrdlem.



  1. Načíst hodnotu pole z pole dílčího dokumentu

  2. MongoDB:dotazy na rozsah na čas vložení s _id a ObjectID

  3. Najděte rozdíl mezi 2 dokumenty na mongoDB z mongo shellu

  4. Změna adresáře úložiště dat MongoDB