Javascript 使用Rockmongo重命名字段
我在mongo数据库中收集了许多文档,如下所示:Javascript 使用Rockmongo重命名字段,javascript,mongodb,rename,field,execute,Javascript,Mongodb,Rename,Field,Execute,我在mongo数据库中收集了许多文档,如下所示: { "_id": ObjectId("4ee5e9079b14f74ef14ddd2f"), "number": 456, "date": "2012-02-13" } 我需要将在“创建的”字段重命名为“date”,我正在使用Rockmongo。我认为重命名此字段的最佳方法是使用Rockmongo中的execute面板。基于我的代码,我尝试了以下方法: function rename(x){ db_name.coll_n
{
"_id": ObjectId("4ee5e9079b14f74ef14ddd2f"),
"number": 456,
"date": "2012-02-13"
}
我需要将在“创建的”字段重命名为“date”
,我正在使用Rockmongo。我认为重命名此字段的最佳方法是使用Rockmongo中的execute面板。基于我的代码,我尝试了以下方法:
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。如果您想完成收藏中的所有文档,您可以通过多次更新一次完成,如下所示:
db.coll_name.update({},{$rename:{"created_at":"date"}},false,true);
其中“false”是upsert选项,“true”是multi-update选项
希望有帮助
更新了一个例子。即使该字段已部分重命名,或者该字段不存在于所有文档中,它也可以工作:
> 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") }
谢谢,韦斯。出于某种原因,这只更改了一个文档,而不是每个文档(即使multi设置为true)。我倾向于认为这必须处理Rockmongo中的一个bug。我还尝试了$set,看看它是否有不同的行为,但仍然是同一个问题,只有一个文档被更新。你把所有4个参数都放进去了吗?您需要(,false,true)——据我所知,rockmongo只是通过javascript命令。我将尝试一下,因为我自己实际使用了rockmongo。对我来说效果很好:(所有的测试文档都更新了)我意识到我的第一个代码中有一个未终止的字符串——所以如果你完全复制它,它就不会工作了。现在修复了。是的,我使用了所有4个参数,但它仍然只能更新一个文档。我不太清楚为什么会这样。我通过pymongo运行了相同的命令,效果很好。不过谢谢你的帮助。