FBFriendModel.find({
id: 333
}, function (err, docs) {
docs.remove(); //Remove all the documents that match!
});
Powyższe wydaje się nie działać. Dokumenty wciąż tam są.
Czy ktoś może to naprawić?
FBFriendModel.find({
id: 333
}, function (err, docs) {
docs.remove(); //Remove all the documents that match!
});
Powyższe wydaje się nie działać. Dokumenty wciąż tam są.
Czy ktoś może to naprawić?
Jeśli nie masz ochoty na iterację, spróbuj FBFriendModel.find({ id:333 }).remove( callback );
lubFBFriendModel.find({ id:333 }).remove().exec();
mongoose.model.find
zwraca zapytanie , które ma remove
funkcję .
Aktualizacja Mongoose v5.5.3 - remove()
jest już nieaktualna. Stosowanie deleteOne()
, deleteMany()
lubfindOneAndDelete() instead.
.exec()
jednak wcale tak nie jest. Czy jest.exec()
potrzebny, czy są jakieś skutki uboczne korzystania z niego, czy nie?AKTUALIZACJA: Wersja Mongoose (5.5.3)
remove () jest przestarzałe i można zamiast niego użyć deleteOne (), deleteMany () lub bulkWrite ().
W
"mongoose": ">=2.7.1"
tym momencie możesz usunąć dokument bezpośrednio za pomocą.remove()
metody, zamiast znajdować go, a następnie usuwać, co wydaje mi się bardziej wydajne i łatwe w utrzymaniu.Zobacz przykład:
AKTUALIZACJA:
W przypadku mangusty
3.8.1
istnieje kilka metod, które pozwalają bezpośrednio usunąć dokument, na przykład:remove
findByIdAndRemove
findOneAndRemove
Więcej informacji można znaleźć w dokumentacji interfejsu API mangusty .
źródło
remove(query)
może potencjalnie opróżnić całą kolekcję, jeśli przypadkowo przejdzieszquery = {}
. Z tego powodu wolę,findOneAndRemove(query)
jeśli usuwam tylko jeden dokument.Model.remove({ _id: 'whatever' }).exec().then(...)
docs
to tablica dokumentów. więc nie mamongooseModel.remove()
metody.Możesz iterować i usuwać każdy dokument z tablicy osobno.
Lub - ponieważ wygląda na to, że znajdujesz dokumenty według (prawdopodobnie) unikalnego identyfikatora - użyj
findOne
zamiastfind
.źródło
To jest dla mnie najlepsze od wersji 3.8.1:
I wymaga tylko jednego wywołania DB. Użyj tego, biorąc pod uwagę, że nie wykonujesz żadnych
remove
czynności do wyszukiwania i usuwania.źródło
pre 'remove'
czynności, działa dobrze.Po prostu zrób
źródło
mongoose.model.find()
zwraca obiekt zapytania, który również maremove()
funkcję.Możesz również użyć
mongoose.model.findOne()
, jeśli chcesz usunąć tylko jeden unikalny dokument.W przeciwnym razie możesz postępować zgodnie z tradycyjnym podejściem, w którym najpierw pobierasz dokument, a następnie go usuwasz.
Poniżej przedstawiono sposoby
model
obiektu, które możesz wykonać, aby usunąć dokument (y):yourModelObj.findByIdAndRemove(id, options, callback)
yourModelObj.remove(conditions, callback);
źródło
remove()
został wycofany. UżyjdeleteOne()
,deleteMany()
lubbulkWrite()
.Kod, którego używam
źródło
(node:9132) DeprecationWarning: collection.remove is deprecated. Use deleteOne, deleteMany, or bulkWrite instead.
Aby uogólnić, możesz użyć:
Innym sposobem na osiągnięcie tego jest:
źródło
Bądź ostrożny z findOne i usuń!
Powyższy kod usuwa WSZYSTKICH użytkowników o nazwie „Alice” zamiast tylko pierwszego .
Nawiasem mówiąc, wolę usunąć takie dokumenty:
Lub podaj wywołanie zwrotne i pomiń exec ()
źródło
Ref: http://mongoosejs.com/docs/api.html#model_Model.remove
źródło
Jeśli szukasz tylko jednego obiektu do usunięcia, możesz użyć
W tym przykładzie Mongoose usunie na podstawie pasującego pliku req.params.id.
źródło
.remove()
działa jak.find()
:źródło
Wolę notację obietnicy, w której potrzebujesz np
źródło
Do usuwania dokumentu wolę używać
Model.remove(conditions, [callback])
Odwołaj się do dokumentacji API, aby usunąć: -
http://mongoosejs.com/docs/api.html#model_Model.remove
W tym przypadku kod będzie:
Jeśli chcesz usunąć dokumenty bez oczekiwania na odpowiedź z MongoDB, nie przekazuj połączenia zwrotnego, musisz wywołać exec na zwróconym zapytaniu
źródło
Możesz po prostu użyć zapytania bezpośrednio w funkcji usuwania, więc:
źródło
Zawsze możesz użyć wbudowanej funkcji Mongoose:
źródło
Aktualizacja:
.remove()
jest nieaktualna, ale nadal działa dla starszych wersjiźródło
za pomocą metody remove (), którą możesz usunąć.
źródło
To działało dla mnie, po prostu spróbuj tego:
źródło
Model.remove
jest przestarzałeZgodnie z odpowiedzią Samyaka Jaina używam Async Await
źródło
Bardzo podoba mi się ten wzorzec w aplikacjach obsługujących funkcje asynchroniczne / oczekujące na ekspres / Mongoose:
źródło
źródło