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

Mongusta:o co chodzi z _doc?

Aktualizacja

Może źle zrozumiałem Twoje pierwotne pytanie, ale teraz wygląda na to, że zmienił się charakter Twojego pytania, więc poniższe informacje są nieistotne, ale zostawiam je. :)

Przetestowałem twój kod i dla mnie działa dobrze. Mongoose nie wykonuje żadnego specjalnego kodu podczas ustawiania właściwości, które nie są częścią schematu (lub kilku innych właściwości specjalnych). JavaScript obecnie nie obsługuje wywoływania kodu dla właściwości, które jeszcze nie istnieją (więc Mongoose nie może stanąć na drodze zestawu goo na przykład właściwość).

Tak więc po ustawieniu właściwości:

foo.goo = { c: 1 };

Mongoose nie jest w to zamieszana. Jeśli Twój console.log było coś innego niż wyświetlony kod, widziałem, że może to zgłosić niepoprawnie.

Dodatkowo, gdy send wyniki z powrotem w formacie JSON, JSON.stringify jest wywoływany, co wywołuje toString na twoim modelu Mongoose. W takim przypadku Mongoose używa tylko właściwości zdefiniowanych w schemacie. Tak więc domyślnie nie są odsyłane żadne dodatkowe właściwości. Zmieniłeś charakter data jednak tablicę, aby bezpośrednio wskazywać dane Mongoose, aby uniknąć tego problemu.

Szczegóły dotyczące normalnego zachowania

Po ustawieniu właściwości goo używając Mongoose, dzieje się sporo rzeczy. Mongoose tworzy pobierające/ustawiające właściwości za pomocą Object.defineProperty (niektóre dokumenty ). Tak więc, gdy ustawisz goo właściwość, którą zdefiniowałeś jako [String] , dzieje się kilka rzeczy:

  1. Kod Mongoose jest wywoływany przed ustawieniem wartości na instancję obiektu (w przeciwieństwie do prostego obiektu JavaScript)
  2. Mongoose tworzy tablicę (opcjonalnie) do przechowywania danych (MongooseArray ), który będzie zawierał dane tablicy. W podanym przykładzie, ponieważ nie przekazałeś tablicy, zostanie ona utworzona.
  3. Mongoose spróbuje przesłać Twoje dane do właściwego typu
  4. Wywoła toString na danych przekazanych w ramach obsady.

Wyniki są więc takie, że dokument zawiera teraz tablicę z toString wersja przekazanego obiektu.

Jeśli zaznaczyłeś zawartość goo Zobaczysz, że jest to tablica z pojedynczym elementem, który jest ciągiem zawierającym [object Object] . Jeśli wybierzesz bardziej podstawowy typ lub pasujesz do typu przechowywania właściwości docelowej, zobaczysz, że podstawowe sprawdzenie równości zadziałałoby.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Złożony dokument Mongodb Aggregate z zagnieżdżonymi wyszukiwaniami

  2. Jak rozwiązać wyjątek ClassNotFoundException:com.mongodb.connection.BufferProvider?

  3. Użyj chudego w manguście z oddzwanianiem

  4. instalacja mongodb - wymagania?

  5. Bezpieczeństwo bazy danych 101:Zrozumienie uprawnień dostępu do bazy danych