mongodb - 如何重命名mongodb中的所有键?

标签 mongodb mongodb-query

我有一个这样的文档:

{
    "_id" : ObjectId("5705fe62d0d50b2316617508"),
    "date" : ISODate("2016-04-07T11:12:43.917Z"),
}
{
    "_id" : ObjectId("5705fe62d0d50b2316617508"),
    "date" : ISODate("2016-04-07T11:12:43.917Z"),
    "XString" : "bb"
}
{
    "_id" : ObjectId("5705fe62d0d50b2316617508"),
    "date" : ISODate("2016-04-07T11:12:43.917Z"),
    "XString" : "ba"
}
{
    "_id" : ObjectId("5705fe62d0d50b2316617508"),
    "date" : ISODate("2016-04-07T11:12:43.917Z"),
    "XString" : "dd"
}

如何将键“XString”更新为“Name”,如果 XString 不存在,则应添加“Name”

尝试使用 $rename as:

db.articles.update({}, {$set:{$rename: {'XString':'Name'}}},{upsert:true});

但它给出的错误为:

The dollar ($) prefixed field '$rename' in '$rename' is not valid for storage.

尝试其他方法:

db.articles.update({}, {$rename: {'XString': 'Name'}}, false, true);
but its not adding the key is it does not exists 

最佳答案

选项错误。您需要 "multi" 而不是 "upsert":

db.articles.update(
  { "XString": { "$exists": true } },
  { "$rename": { 'XString': 'Name' } },
  { "multi": true }
); 

$exists测试确保您只选择您要重命名的 key 实际存在的文档。

还有$rename是一个“更新修饰符”,这意味着它是“更新”文档的“顶级”参数。

“multi” 表示影响所有匹配的文档,而不仅仅是“第一个”。

如果您想要一个键实际上不存在的“空白”值,那么您可以执行相反的操作,最好是在 $rename 操作之后:

db.articles.update(
  { "Name": { "$exists": false } },
  { "$set": { 'Name': '' } },
  { "multi": true }
); 

关于mongodb - 如何重命名mongodb中的所有键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36477240/

相关文章:

json - 我在哪里可以获得要在 MongoDB 中使用的示例 JSON 数据

mongodb - 如何将一个 ObjectIds 数组转换为一个包含原始数组元素值的字段的嵌入文档数组

javascript - Mongoose 3.8 中的 ObjectId 数组

mongodb - 每个 MongoDB 文档的 BSON 大小

Mongodb $lookup 将集合合并成一个新集合

javascript - Mongo 无法与 Node.js 一起使用

php - 有效地计算 MongoDB 中出现的百分比

javascript - MongoDB upsert 数组内

java - 如何在插入到 MongoDB 时避免重复条目

mongodb - Mongo 查询数组中的嵌套字段。