【问题标题】:Renaming Fields with Rockmongo使用 Rockmongo 重命名字段
【发布时间】:2012-03-20 14:47:04
【问题描述】:

我在 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。

【问题讨论】:

    标签: javascript mongodb rename field execute


    【解决方案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") }
    

    【讨论】:

    • 谢谢韦斯。由于某种原因,这只更改了一个文档,而不是每个文档(即使将 multi 设置为 true)。我倾向于认为这必须处理 Rockmongo 中的错误。我还用 $set 尝试了它,看看它的行为是否不同,但仍然是同样的问题,只更新了一个文档。
    • 你把4个参数都放进去了?你需要 (, , false, true)——据我所知,rockmongo 只是通过 javascript 命令。我会试一试,因为我自己实际使用的是rockmongo。
    • 对我来说效果很好:imgur.com/zLxMU(所有测试文档都已更新)
    • 我意识到我的第一个代码中有一个未终止的字符串——所以如果你准确地复制它,它就不会起作用。现在修好了。
    • 是的,我使用了所有 4 个参数,但它仍然只会更新一个文档。我不确定为什么会这样。我通过 pymongo 运行了相同的命令,它运行良好。不过,感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2020-02-06
    • 2017-03-11
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多