假设我在MongoDB中有一个5000条记录的集合,每条记录都包含类似的内容:

{
"occupation":"Doctor",
"name": {
   "first":"Jimmy",
   "additional":"Smith"
}

是否有一种简单的方法可以将所有文档中的字段"additional"重命名为"last"?我在文档中看到了$rename运算符,但我不太清楚如何指定子字段.

推荐答案

你可以使用:

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);

In MongoDB 3.2 you can also use

db.students.updateMany( {}, { $rename: { "oldname": "newname" } } )

这个的一般语法是

db.collection.updateMany(filter, update, options)

https://docs.mongodb.com/manual/reference/method/db.collection.updateMany/

Mongodb相关问答推荐

数组字段包含其他字段的数组值

为什么我的Mongoose更新找不到匹配?

在不知道字段名称的情况下如何引用 MongoDB 中的字段?

从具有多个数组匹配 MongoDB 的两个集合中采样数据

如何使用 Golang 库获取 MongoDB 版本?

如何在 Mongo 聚合管道中获取限制之前的计数

如何使用 C# MongoDB 驱动程序检索字段子集?

Mongo查找对象内最长数组的查询

使用 brew upgrade Mongo update from 3.4 to 4.0 报错:在try 升级到 4.0 之前,数据文件需要完全升级到 3.6 版

在 Ubuntu 14.04 中安装 MongoDB 失败

如何在array.NET驱动程序中的元素属性上创建MongoDB MultiKey索引

mongo - 如何查询嵌套的 json

Mongoose 不创建新集合

MongoDB 数据库,相当于 SELECT column1, column2 FROM tbl

插入违反唯一索引的 MongoDB 文档时如何捕获错误?

mongo - Ruby连接问题

MongoDB - Permission denied for socket: /tmp/mongodb-27017.sock

如何判断 MongoDB 中是否存在字段?

从 mongo 结果中删除 _id

全局初始化失败:BadValue Invalid or no user locale set.请确保正确设置 LANG 和/或 LC_* 环境变量