MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Przerzuć zwykły obiekt na dokument mangusty

Opublikowanie własnej odpowiedzi, aby nie pozostało otwarte:

Modele w wersji 4 (stabilna wydana 25.03.2015) mają teraz hydrate() metoda. Żadne z pól nie zostanie oznaczone jako brudne początkowo, co oznacza wywołanie save() nie zrobi nic, dopóki pole nie zostanie zmutowane.

https://github.com/LearnBoost/mongoose /blob/41ea6010c4a84716aec7a5798c7c35ef21aa294f/lib/model.js#L1639-1657

Bardzo ważne jest, aby pamiętać, że jest to przeznaczone do konwersji zwykłego obiektu JS załadowanego z bazy danych na dokument mangusty. Jeśli otrzymujesz dokument z usługi REST lub czegoś podobnego, powinieneś użyć findById() i update() .

Dla tych, którzy żyją niebezpiecznie:

Jeśli naprawdę chcesz zaktualizować istniejący dokument bez dotykania bazy danych, przypuszczam, że możesz wywołać hydrate() , oznacz pola jako brudne, a następnie wywołaj save() . Nie różni się to zbytnio od metody ustawienia doc.isNew = false; jak sugerowałem w moim pierwotnym pytaniu. Jednak Valeri (z zespołu mangusty) zasugerował, aby tego nie robić. Może to powodować błędy walidacji i inne problemy ze skrajnymi przypadkami i generalnie nie jest dobrą praktyką. findById jest naprawdę szybki i nie będzie Twoim wąskim gardłem.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Meteor Wysyłanie zapytań do innych użytkowników przez e-mail

  2. Jak usunąć elementy w MongoRepository za pomocą adnotacji zapytania?

  3. Jak przechowywać sesje w MongoDB z NodeJS?

  4. Dlaczego pole wielowartościowe jest złym pomysłem w relacyjnych bazach danych

  5. Wyjątek MongoDB:serwer zgłasza wersję 0 wire, ale wersja libmongoc wymaga co najmniej 3