MongoDB - 替换嵌入字段

发布于 01-16 22:55 字数 902 浏览 3 评论 0 原文

我有以下集合:

[
  {
    "_id": "6021d4e8de525e00bb3623f1",
    ...otherFields,
    "addonGroups": [
      {
        "_id": "6021d474143dbb00da601e6a",
        ...otherFields,
        "addons": [
          {
            "name": "Nike\t珍珠",
            ...otherFields,
          },
          {
            "name": "Adidas\t椰果",
            ...otherFields,
          },
          
        ]
      }
    ],
    
  }
]

我想替换所有插件名称字段上的空格“”的 \t 字符

我有以下内容:

db.collection.aggregate([
  {
    $addFields: {
      "addonGroups.addons.name": {
        $replaceAll: {
          input: "$addonGroups.addons.name",
          find: "\t",
          replacement: " "
        }
      }
    }
  }
])

我收到此错误:

查询失败:(Location51746)聚合时出现PlanExecutor错误::由::$replaceAll要求'input'是字符串,发现:[["Nike珍珠", "Adidas椰果"]]

I have the following collection:

[
  {
    "_id": "6021d4e8de525e00bb3623f1",
    ...otherFields,
    "addonGroups": [
      {
        "_id": "6021d474143dbb00da601e6a",
        ...otherFields,
        "addons": [
          {
            "name": "Nike\t珍珠",
            ...otherFields,
          },
          {
            "name": "Adidas\t椰果",
            ...otherFields,
          },
          
        ]
      }
    ],
    
  }
]

I want to replace the \t character for whitespace " " on all the addons name field

I have the following:

db.collection.aggregate([
  {
    $addFields: {
      "addonGroups.addons.name": {
        $replaceAll: {
          input: "$addonGroups.addons.name",
          find: "\t",
          replacement: " "
        }
      }
    }
  }
])

I am getting this error:

query failed: (Location51746) PlanExecutor error during aggregation :: caused by :: $replaceAll requires that 'input' be a string, found: [["Nike 珍珠", "Adidas 椰果"]]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

偷得浮生 2025-01-23 22:55:21

您可以使用 $map 运算符。

db.collection.aggregate([
  {
    $set: {
      addonGroups: {
        $map: {
          input: "$addonGroups",
          as: "addonGroup",
          in: {
            "$mergeObjects": [
              "$addonGroup",
              {
                "addons": {
                  $map: {
                    input: "$addonGroup.addons",
                    as: "addon",
                    in: {
                      $mergeObjects: [
                        "$addon",
                        {
                          "name": {
                            $replaceAll: {
                              input: "$addon.name",
                              find: "\t",
                              replacement: " "
                            }
                          }
                        }
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
])

示例 Mongo Playground

You can work with $map operator.

db.collection.aggregate([
  {
    $set: {
      addonGroups: {
        $map: {
          input: "$addonGroups",
          as: "addonGroup",
          in: {
            "$mergeObjects": [
              "$addonGroup",
              {
                "addons": {
                  $map: {
                    input: "$addonGroup.addons",
                    as: "addon",
                    in: {
                      $mergeObjects: [
                        "$addon",
                        {
                          "name": {
                            $replaceAll: {
                              input: "$addon.name",
                              find: "\t",
                              replacement: " "
                            }
                          }
                        }
                      ]
                    }
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
])

Sample Mongo Playground

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文