我在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。
答案 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") }