用Rockmongo重命名字段

时间:2012-03-20 14:47:04

标签: javascript mongodb rename field execute

我在mongo数据库中有许多文档集合,如下所示:

{
   "_id": ObjectId("4ee5e9079b14f74ef14ddd2f"),
   "number": 456,
   "date": "2012-02-13"
}

我需要将字段"created_at"重命名为"date",我正在使用Rockmongo。我认为重命名此字段的最佳方法是使用Rockmongo中的执行面板。我的代码基于this post我尝试了这个:

function rename(x){
   db_name.coll_name.update({"_id":x._id}, {
      $rename: {"date":"created_at"}
   });
}

db_name.coll_name.find({"date":{$ne:null}}).forEach(rename);

但未成功。我主要使用pymongo(可以用它来做),但我认为学习这个执行面板会非常有用非常有用,因为我继续使用rockmongo。

1 个答案:

答案 0 :(得分:1)

如果您想要收集集合中的所有文档,可以使用多次更新一次完成所有文档,如下所示:

db.coll_name.update({},{$rename:{"created_at":"date"}},false,true);

其中“false”是upsert选项,“true”是多重更新选项。

希望有所帮助。

更新了示例。如果字段已经部分重命名,或者所有文档中都不存在该字段,它甚至可以工作:

> db.test2.insert({x:12});
> db.test2.insert({x:12});
> db.test2.insert({x:12});
> db.test2.insert({});
> db.test2.update({},{$rename:{"x":"x2"}},false,true);
> db.test2.find();
{ "_id" : ObjectId("4f68afb1206dcc69f52c2157"), "x2" : 12 }
{ "_id" : ObjectId("4f68afb2206dcc69f52c2158"), "x2" : 12 }
{ "_id" : ObjectId("4f68afb2206dcc69f52c2159"), "x2" : 12 }
{ "_id" : ObjectId("4f68afb5206dcc69f52c215a") }