Gat*_* VP 29
执行此类操作的最简单方法是循环重新映射字段名称的数据集.最简单的方法是编写一个执行重写的函数,然后使用.find().forEach()shell中的语法.
这是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();
Run Code Online (Sandbox Code Playgroud)
在上述情况下我做的$unset和$set在同样的动作.MongoDB不支持跨集合的事务,但上面是单个文档.因此,您可以保证set和unset将是原子的(即它们都成功或者它们都失败).
这里唯一的限制是你需要管理外部编写器以保持数据的一致性.我对此的正常偏好只是在此更新时关闭写入.如果此选项不可用,那么您必须确定数据的一致性级别.(我可以在这里提供一些想法,但它确实会特定于您的数据和系统)
Mic*_*lop 16
db.collection_name.update({}, {$rename: {"oldname": "newname"}}, false, true);
Run Code Online (Sandbox Code Playgroud)
这将重命名集合中每行的列.
此外,我发现如果您的列(您要重命名的列)出现在索引目录(db.collection_name.getIndexes())中,那么您将不得不删除并重新创建索引(使用新列名称) )也.
| 归档时间: |
|
| 查看次数: |
12177 次 |
| 最近记录: |