Używam biblioteki Mongoose do uzyskiwania dostępu do MongoDB z node.js.
Czy istnieje sposób na usunięcie klucza z dokumentu ? tj. nie tylko ustawić wartość na null, ale ją usunąć?
User.findOne({}, function(err, user){
//correctly sets the key to null... but it's still present in the document
user.key_to_delete = null;
// doesn't seem to have any effect
delete user.key_to_delete;
user.save();
});
mongodb
node.js
mongoose
document-database
Daniel Beardsley
źródło
źródło
Odpowiedzi:
We wczesnych wersjach trzeba by było usunąć sterownik node-mongodb-native. Każdy model ma obiekt kolekcji, który zawiera wszystkie metody oferowane przez node-mongodb-native. Możesz więc wykonać daną czynność w ten sposób:
Od wersji 2.0 możesz:
A od wersji 2.4, jeśli masz już instancję modelu, możesz:
źródło
User.update({ _id: id }, { $unset: { field: 1 }}, callback)
lub jeśli masz instancję dokumentu, ustaw ścieżkę na undefined, a następnie zapisz ją:doc.field = undefined; doc.save()
doc.set('field', undefined)
doc.field.foo
?doc.set('field', undefined)
może nie wystarczyć, ponieważ tryb ścisły (domyślny) nie pozwala na ustawienie pól, których nie ma już w schemacie.doc.set('field', undefined, { strict: false })
działało dobrze.Będziesz chciał to zrobić:
źródło
Używam mangusty i użycie którejkolwiek z powyższych funkcji spełniło moje wymagania. Funkcja kompiluje się bez błędów, ale pole nadal pozostaje.
załatwił sprawę dla mnie.
źródło
W składni mongo, aby usunąć jakiś klucz, wykonaj następujące czynności:
Wydaje się, że w Mongoose to samo.
Edytować
Sprawdź ten przykład.
źródło
Czy może to być problem uboczny, taki jak używanie
zamiast
do oddzwonienia do znaleziska? Po prostu próbuję w tym pomóc, ponieważ już miałem tę sprawę.
źródło
Dokument Mongoose NIE jest zwykłym obiektem javascript i dlatego nie możesz użyć operatora usuwania (lub
unset
z biblioteki 'lodash').Twoje opcje to ustawienie doc.path = null || undefined lub użyć metody Document.toObject (), aby zamienić dokument mongoose w zwykły obiekt, a następnie użyć go jak zwykle. Przeczytaj więcej w mongoose api-ref: http://mongoosejs.com/docs/api.html#document_Document-toObject
Przykład wyglądałby mniej więcej tak:
źródło
Próbować:
źródło
Problem z tymi wszystkimi odpowiedziami polega na tym, że dotyczą one jednej dziedziny. na przykład, powiedzmy, że chcę usunąć wszystkie pola z mojego dokumentu, jeśli są one pustym ciągiem
""
. Najpierw sprawdź, czy pole jest puste, wpisz do$unset
:źródło
jeśli chcesz usunąć klucz z kolekcji, wypróbuj tę metodę. to działało dla mnie
źródło
możesz użyć delete user._doc.key
źródło