我有这个收藏:
{
A:1
B:2
:3
D:4
}
例如,我们需要用 C 替换空格,我该如何实现这一点?
像这样
{
A:1
B:2
C:3
D:4
}
我尝试重命名,但这是不可能的,我唯一能想到的就是重建一个集合。
如果空格是空格字符
\s
那么您可以简单地查找它并使用 $rename 重命名该键:
db.collection.updateOne({' ':3}, { $rename: { ' ': 'C' } });
如果您有多个空白键实例,您可以使用以下命令更新它们:
db.collection.updateMany({}, { $rename: { ' ': 'C' } });
我们可以使用 $rename 运算符来实现此目的。
db.collection.update({"_id": 0},{ "$rename": { " ": "C" }})
一般的解决方案是将对象转换为数组,并使用正则表达式来匹配不包含任何字母数字字符的字段。
这将能够匹配任何形式的空格,然后是空字符串等。
如果你能确定每个文档中只有1个这样的字段,你可以使用管道形式的更新来一次性修复整个集合:
以下管道:
这将匹配“”、“”、“”、“”(制表符)、“”(空字符)等。
db.collection.update({},
[
{$project: {
docArray: {$map: {
input: {$objectToArray: "$$ROOT"},
in: {$cond: {
if: {$regexMatch: {
input: "$$this.k",
regex: "[A-Za-z0-9]"
}},
then: "$$this",
else: {k: "C", v: "$$this.v"}
}}
}}
}},
{$replaceRoot: {
newRoot: {$arrayToObject: "$docArray"}
}}
])