如何重命名mongodb中的所有密钥?

如何重命名mongodb中的所有密钥?,mongodb,mongodb-query,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"

我有这样的文件:

{
    "_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作为:

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 

错误的选择。您想要的是
“多”
,而不是
“向上插入”

db.articles.update(
{“XString”:{“$exists”:true},
{“$rename”:{'XString':'Name'},
{“多”:真}
); 
该测试确保您仅选择您要重命名的密钥实际存在的文档

也是一个“更新修饰符”,这意味着它是“更新”文档的“顶级”参数

“多”
意味着影响所有匹配的文档,而不仅仅是“第一个”

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

db.articles.update(
{“Name”:{“$exists”:false},
{“$set”:{'Name':'''}},
{“多”:真}
); 

如果MongoDB服务器版本为3.2,则可以使用该方法。当然,您需要使用和,如中所述。另外,
updateMany()
方法不使用“multi”选项

最后但并非最不重要的一点是,自3.0版以来,主要驱动程序不支持
update()
方法

下面的查询将“XString”重命名为“Name”,其中存在“XString”

db.articles.updateMany(
{“XString”:{“$exists”:true},
{“$rename”:{“XString”:“Name”}
)
要在“XString”不存在的地方设置默认值,请使用update操作符

db.articles.updateMany(
{“Name”:{“$exists”:false},
{“$set”:{“Name”:“}}
)

其工作原理与:db.articles.update({},{$rename:{'XString':'Name'}},false,true)相同;如果不存在名称键,则需要添加名称键……可能吗?@HarjeetJadeja您需要查询部分中的
$exists