2013-03-26 10 views
13

próbuję zmienić nazwę jednego pola we wszystkich dokumentach z kolekcji, zdb.collection.update() wszystkie dokumenty

db.coll.update({},{ $rename: {'originField':'newField'} }); 

ale tylko jeden dokument zostanie zmieniony, to dlaczego?

+0

przez aktualizacje są domyślnymi pojedyncza, musisz dodać ', {multi: true}' jako trzeci parametr – Sammaye

+0

@Samajko dziękuję, że to jest odpowiedź: – JuanPablo

+0

@ Czy możesz dodać komentarz jak odpowiedź na zamknięcie? – JuanPablo

Odpowiedz

32

Wszystkie aktualizacje w MongoDB są domyślnie pojedyncze. Należy dodać trzecią opcję do komendy, aby:

db.coll.update({},{ $rename: {'originField':'newField'} }, {multi:true}); 

Albo, jak @totymedli wskazał, jeśli używasz 3.2 i powyżej można użyć updateMany(): MongoDB: update every document on one field

+0

Tutaj jest odniesienie z dokumentacji MongoDB http : //docs.mongodb.org/manual/applications/update/#update-multiple-documents –

+0

, {multi: true} załatwił sprawę, dziękuję – Andy

+0

Od MongoDB 3.2 możesz również [użyć 'updateMany'] (https:// stackoverflow.com/a/9038593/1494454). – totymedli

2
db.collectionname.update({ "field" : "oldvalue" }, { $set:{ "field" : "newvalue" } }, { multi : true }); 
+0

Jak to zrobić dla oldvalue + "jakiś ciąg" –