Mam dokument z znaleziska mangusty, który chcę rozszerzyć przed kodowaniem JSON i wysłaniem w odpowiedzi. Jeśli spróbuję dodać właściwości do dokumentu, zostanie to zignorowane. Właściwości nie pojawiają się w przypadku Object.getOwnPropertyNames(doc)
niemożności normalnego rozszerzenia. Dziwne jest to, że JSON.parse(JSON.encode(doc))
działa i zwraca obiekt o wszystkich poprawnych właściwościach. Czy jest na to lepszy sposób?
200
Model.find({})
powrocie dokumentów to tablica. Czy umiesz docs.toObject?var docArray = modelArray.map(function(model) { return model.toObject(); });
Innym sposobem na to jest poinformowanie Mongoose, że wszystko, czego potrzebujesz, to zwykła wersja JavaScript zwróconego dokumentu za pomocą
lean()
łańcucha zapytań. W ten sposób Mongoose pomija etap tworzenia pełnej instancji modelu i otrzymujesz bezpośredniodoc
modyfikację:źródło
lean
jest na ogół bardziej wydajne, ponieważ pomijasz narzut związany z pierwszym tworzeniem pełnego dokumentu Mongoose.lean()
w zapytaniu ustawia opcję przed wykonaniem (przezexec
) zapytania, dzięki czemu wyniki są bezpośrednio w „ubogiej” formie. Zobacz to pytanie, aby poznać pozytywny wpływ połączeń na wydajnośćlean
.szybki sposób, jeśli właściwość nie znajduje się w modelu:
document.set( key,value, { strict: false });
źródło
Lepszym sposobem rozwiązania takiego problemu jest użycie
doc.toObject()
tego w ten sposóbinne opcje obejmują:
getters:
zastosuj wszystkie metody pobierające (ścieżkę i metody pobierające wirtualne)virtuals:
zastosuj wirtualne operacje pobierania (może zastąpić opcję pobierania)minimize:
usuń puste obiekty (domyślnie true)transform:
funkcja przekształcania stosowana do dokumentu wynikowego przed zwróceniemdepopulate:
wyludnij wszystkie zapełnione ścieżki, zastępując je oryginalnymi referencjami (domyślnie false)versionKey:
czy dołączyć klucz wersji (domyślnie true)więc na przykład możesz powiedzieć
i teraz będzie działać.
W celach informacyjnych patrz: http://mongoosejs.com/docs/api.html#document_Document-toObject
źródło
Aby uzyskać zwykły obiekt z dokumentu Mongoose, użyłem
_doc
właściwości w następujący sposóbPróbowałem,
toObject
ale dało mi to funkcje, argumenty i wszystkie inne rzeczy, których nie potrzebuję.źródło
_
na początku nie jest idealnym rozwiązaniem. Korzystanie z lean może rozwiązać twoją sprawę._doc
nieruchomości wiele razy bez żadnych problemów. A użycielean
metody daje prosty obiekt, na którym nie można wykonywać operacji na modelu mangusty.Możesz także skreślić obiekt, a następnie ponownie przeanalizować, aby utworzyć normalny obiekt. Na przykład:
źródło