Możesz użyć:
db.foo.update({}, {$rename:{"name.additional":"name.last"}}, false, true);
Lub po prostu zaktualizuj dokumenty zawierające właściwość:
db.foo.update({"name.additional": {$exists: true}}, {$rename:{"name.additional":"name.last"}}, false, true);
false, true
W powyższym sposobie są następujące: { upsert:false, multi:true }
. Musisz multi:true
zaktualizować wszystkie swoje rekordy.
Lub możesz użyć poprzedniego sposobu:
remap = function (x) {
if (x.additional){
db.foo.update({_id:x._id}, {$set:{"name.last":x.name.additional}, $unset:{"name.additional":1}});
}
}
db.foo.find().forEach(remap);
W MongoDB 3.2 możesz także użyć
db.students.updateMany( {}, { $rename: { "oldname": "newname" } } )
Ogólna składnia tego jest
db.collection.updateMany(filter, update, options)
https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/
false, true
wupdate
sposobie$rename
wersji:{ upsert:false, multi:true }
. Musiszmulti:true
zaktualizować wszystkie swoje rekordy.upsert:true
otrzymam to utworzy nazwę pola, jeśli nazwa pola nie istnieje, domyślnie jest tofalse
."table.field" : "table.field"
składni. Zadziałało, kiedy właśnie użyłem"field" : "field"
składni.name.last
nie jesttable.field
. Jeśli przeczytasz pytanie, zobaczysz, żename
pole zawiera obiekt.db.foo.update({}, {$rename:{"name.0.additional":"name.0.last"}}, false, true)
?proszę spróbować
db.collectionName.update({}, { $rename : { 'name.additional' : 'name.last' } }, { multi: true } )
i przeczytaj to :) http://docs.mongodb.org/manual/reference/operator/rename/#_S_rename
źródło
upsert
imulti
.Jeśli kiedykolwiek musisz zrobić to samo z mongoid:
AKTUALIZACJA
Nastąpiła zmiana w składni
monogoid 4.0.0
:źródło
Model.all.rename(old_field: :new_field)
Każdy może potencjalnie użyć tego polecenia, aby zmienić nazwę pola z kolekcji (nie używając żadnego _id):
patrz FYI
źródło
Ten kod nodejs po prostu to robi, ponieważ jak wspomniał @Felix Yan, poprzedni sposób wydaje się działać dobrze, miałem pewne problemy z innymi fragmentami, mam nadzieję, że to pomoże.
Spowoduje to zmianę nazwy kolumny „oldColumnName” na „newColumnName” tabeli „dokumenty”
źródło
Używam Mongo 3.4.0
Operator $ rename aktualizuje nazwę pola i ma następującą postać:
na przykład
Nowa nazwa pola musi różnić się od istniejącej nazwy pola. Aby określić w osadzonym dokumencie, użyj notacji kropkowej.
Ta operacja zmienia nazwę pola nmae na nazwę dla wszystkich dokumentów w kolekcji:
W powyższej metodzie false, true to: {upsert: false, multi: true}. Aby zaktualizować wszystkie rekordy, potrzebujesz multi: true.
Zmień nazwę pola w osadzonym dokumencie
użyj linku: https://docs.mongodb.com/manual/reference/operator/update/rename/
źródło
Jeśli używasz MongoMapper, działa to:
źródło