Zaskoczyło mnie, że poniższy przykładowy kod aktualizuje tylko jeden dokument:
> db.test.save({"_id":1, "foo":"bar"});
> db.test.save({"_id":2, "foo":"bar"});
> db.test.update({"foo":"bar"}, {"$set":{"test":"success!"}});
> db.test.find({"test":"success!"}).count();
1
Wiem, że mogę przeglądać i aktualizować, dopóki wszystkie nie zostaną zmienione, ale wydaje się to strasznie nieefektywne. Czy jest lepszy sposób?
Począwszy od wersji 3.3 możesz użyć updateMany
W wersji 2.2 funkcja aktualizacji ma następującą postać:
https://docs.mongodb.com/manual/reference/method/db.collection.update/
źródło
W przypadku wersji Mongo> 2.2 dodaj pole multi i ustaw je na true
źródło
Stworzyłem sposób, aby to zrobić za pomocą lepszego interfejsu.
db.collection.find({ ... }).update({ ... })
- wielokrotna aktualizacjadb.collection.find({ ... }).replace({ ... })
- pojedyncza wymianadb.collection.find({ ... }).upsert({ ... })
- pojedynczy wzrostdb.collection.find({ ... }).remove()
- usuwanie wieluMożesz także zastosować ograniczanie, pomijać, sortować aktualizacje i usuwać, łącząc je wcześniej.
Jeśli jesteś zainteresowany, sprawdź Mongo-Hacker
źródło
db.userActivity.find({ 'appId' : 1234, 'status' : 1}).update({ $set: { 'status': 1 } }); 2017-06-05T17:47:10.038+0530 E QUERY [thread1] TypeError: db.userActivity.find(...).update is not a function :
W kliencie MongoDB wpisz:
Nowość w wersji 3.2
Parametry:
Argument słowa kluczowego
multi
nie jest zajętyźródło
MongoDB znajdzie tylko jeden pasujący dokument, który spełnia kryteria zapytania podczas wydawania polecenia aktualizacji, niezależnie od tego, który dokument pasuje jako pierwszy, zostanie zaktualizowany, nawet jeśli istnieje więcej dokumentów spełniających kryteria, zostanie zignorowany.
aby temu zaradzić, możemy określić opcję „MULTI” w instrukcji aktualizacji, co oznacza aktualizację wszystkich zestawów dokumentów, które spełniają kryteria zapytania. przeszukaj wszystkie zestawy dokumentów w kolekcji, znajdując te, które spełniają kryteria i zaktualizuj:
źródło
Następujące polecenie może zaktualizować wiele rekordów w kolekcji
źródło
Miałem ten sam problem i znalazłem rozwiązanie, które działa jak urok
po prostu ustaw flagę multi na true w ten sposób:
Mam nadzieję że to pomogło :)
źródło
Aby zaktualizować całą kolekcję,
źródło
Możesz użyć. "
źródło
Wszystkie najnowsze wersje mongodb updateMany () działają poprawnie
źródło
Dzięki za udostępnienie tego, użyłem z 2.6.7 i następujące zapytanie właśnie działało,
dla wszystkich dokumentów:
dla pojedynczego dokumentu:
źródło