我有一个这样的文档:
{
"_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/