如何更改 mongodb 中的空白标题?

问题描述 投票:0回答:3

我有这个收藏:

{
     A:1
     B:2
      :3
     D:4
}

例如,我们需要用 C 替换空格,我该如何实现这一点?

像这样

{
  A:1
  B:2
  C:3
  D:4
}

我尝试重命名,但这是不可能的,我唯一能想到的就是重建一个集合。

mongodb mongodb-query
3个回答
0
投票

如果空格是空格字符

\s
那么您可以简单地查找它并使用 $rename 重命名该键:

db.collection.updateOne({' ':3}, { $rename: { ' ': 'C' } });

如果您有多个空白键实例,您可以使用以下命令更新它们:

db.collection.updateMany({}, { $rename: { ' ': 'C' } });

0
投票

我们可以使用 $rename 运算符来实现此目的。

db.collection.update({"_id": 0},{  "$rename": {    " ": "C"  }})

参考:https://mongoplayground.net/p/mmS2icBgOTO


0
投票

一般的解决方案是将对象转换为数组,并使用正则表达式来匹配不包含任何字母数字字符的字段。

这将能够匹配任何形式的空格,然后是空字符串等。

如果你能确定每个文档中只有1个这样的字段,你可以使用管道形式的更新来一次性修复整个集合:

以下管道:

  • 匹配集合中的每个文档
  • 使用 $objectToArray 将每个文档转换为数组
  • 使用 $map 检查数组中的每个键/值对
  • 在地图内,不触及任何与正则表达式匹配的字段
  • 对于名称与正则表达式不匹配的字段,将字段名称替换为“C”
  • 将数组转换回对象

这将匹配“”、“”、“”、“”(制表符)、“”(空字符)等。

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"}
  }}
])

游乐场

© www.soinside.com 2019 - 2024. All rights reserved.