MongoDB 1.6.5 : how to rename field in collection

标签 mongodb

$rename 功能仅在开发版本 1.7.2 中可用。 1.6.5如何重命名字段?

最佳答案

执行此类操作的最简单方法是循环遍历数据集重新映射字段名称。最简单的方法是编写一个执行重写的函数,然后在 shell 中使用 .find().forEach() 语法。

这是一个来自 shell 的示例:

db.foo.save({ a : 1, b : 2, c : 3});
db.foo.save({ a : 4, b : 5, c : 6});
db.foo.save({ a : 7, b : 8 });
db.foo.find();

remap = function (x) {
  if (x.c){
    db.foo.update({_id:x._id}, {$set:{d:x.c}, $unset:{c:1}});
  }
}

db.foo.find().forEach(remap);
db.foo.find();

在上述情况下,我在同一操作中执行 $unset$set。 MongoDB 不支持跨集合的事务,但以上是单个文档。因此,您可以保证 set 和 unset 将是原子的(即它们都成功或都失败)。

这里唯一的限制是您需要管理外部编写者以保持数据一致。我对此的正常偏好只是在更新时关闭写入。如果此选项不可用,那么您必须弄清楚您希望数据的一致性级别。 (我可以在这里提供一些想法,但它确实会针对您的数据和系统)

关于MongoDB 1.6.5 : how to rename field in collection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4813160/

相关文章:

node.js - 位置运算符不适用于feathersjs查询更新

mongodb - 多更新在 MongoDB 中不起作用

c# - MongoDB C# 驱动程序 : Ignore Property on Insert

MongoDB - 将数组拆分为多个文档并用数组对象替换现有文档

javascript - 如何为两个 ddp 连接的应用程序使用相同的数据库

mongodb - 从集合中获取第 n 个项目

javascript - Mongoose.js 通过一次 connect() 调用创建与 MongoDB 的多个连接

mongodb - $unwind和$text在聚合框架mongodb中的使用

MongoDB Atlas Golang mgo包 "No reachable servers"错误

javascript - MEAN.JS 无法连接 MongoDB