Ты можешь использовать:
db.foo.update({}, {$rename:{"name.additional":"name.last"}}, false, true);
Или просто обновить документы, которые содержат свойство:
db.foo.update({"name.additional": {$exists: true}}, {$rename:{"name.additional":"name.last"}}, false, true);
false, true
В указанном выше способе , являются: { upsert:false, multi:true }
. Вам нужно multi:true
обновить все ваши записи.
Или вы можете использовать первый способ:
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);
В MongoDB 3.2 вы также можете использовать
db.students.updateMany( {}, { $rename: { "oldname": "newname" } } )
Общий синтаксис этого
db.collection.updateMany(filter, update, options)
https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/
false, true
вupdate
способе$rename
версии являются:{ upsert:false, multi:true }
. Вам нужноmulti:true
обновить все ваши записи.upsert:true
, создаст имя поля, если имя поля не существует, по умолчаниюfalse
."table.field" : "table.field"
синтаксис. Это сработало, когда я просто использовал"field" : "field"
синтаксис.name.last
нетtable.field
. Если вы прочитаете вопрос, вы увидите, чтоname
поле содержит объект.db.foo.update({}, {$rename:{"name.0.additional":"name.0.last"}}, false, true)
:?Пожалуйста попробуйте
db.collectionName.update({}, { $rename : { 'name.additional' : 'name.last' } }, { multi: true } )
и прочитайте это :) http://docs.mongodb.org/manual/reference/operator/rename/#_S_rename
источник
upsert
andmulti
.Если вам нужно сделать то же самое с mongoid:
ОБНОВИТЬ
Существует изменение в синтаксисе в
monogoid 4.0.0
:источник
Model.all.rename(old_field: :new_field)
Любой может потенциально использовать эту команду для переименования поля из коллекции (не используя _id):
см. к вашему сведению
источник
Этот код nodejs просто делает это, так как @Felix Yan упоминал, что прежний способ работает нормально, у меня были некоторые проблемы с другими фрагментами кода, надеюсь, это поможет.
Это переименует столбец «oldColumnName» в «newColumnName» таблицы «документы».
источник
Я использую, Mongo 3.4.0
Оператор $ rename обновляет имя поля и имеет следующую форму:
например
Новое имя поля должно отличаться от существующего имени поля. Чтобы указать во встроенном документе, используйте точечную запись.
Эта операция переименовывает поле nmae в name для всех документов в коллекции:
В приведенном выше методе false true - это: {upsert: false, multi: true}. Чтобы обновить все ваши записи, вам понадобится multi: true.
Переименовать поле во встроенном документе
используйте ссылку: https://docs.mongodb.com/manual/reference/operator/update/rename/
источник
Если вы используете MongoMapper, это работает:
источник