如何在mongodb 3.2中查找和重命名字段名称

时间:2017-03-08 18:52:26

标签: json mongodb mongodb-query

如何在MongoDB中重命名字段名称?

我想将以$开头的所有字段名称替换为&。

谢谢!

1 个答案:

答案 0 :(得分:0)

我看到了一些链接并为您解决了问题

首先,您需要获取所有列,您可以使用MapReduce执行此操作:

mr = db.runCommand({
  "mapreduce" : "my_collection",
  "map" : function() {
    for (var key in this) { emit(key, null); }
  },
  "reduce" : function(key, stuff) { return null; }, 
  "out": "my_collection" + "_keys"
});

然后在生成的集合上运行distinct,以便找到所有键:

columns = db[mr.result].distinct("_id")

并重命名所有匹配的列

columns.forEach(function(columnName) {
    if (columnName.indexOf('$') == 0) {
        var newColumnName = columnName.replace('$', '&');
        rename_query = { '$rename': {} };
        rename_query['$rename'][columnName] = newColumnName;
        db.my_collection.updateMany({}, rename_query)
    }
})

参考链接

MongoDB Get names of all keys in collection

MongoDB $rename javascript variable for key name