如何将逗号分隔的字符串字段变成MongoDB中的数组?

发布于 2025-02-07 02:38:25 字数 687 浏览 1 评论 0原文

我有三个看起来像这样的文档:

_id: ObjectId('61e1312ad435c7124aa883a1')
name: "Brian"
languages: "English,Spanish,French"

_id: ObjectId('52e1312ad435c7124aa883a2')
name: "Max"
languages: "English"

_id: ObjectId('37e1312ad435c7124aa883a9')
name: "Mike"
languages: ""

如您所见,语言字段可以是空的,有一个项目,也可以用逗号分隔的多个项目。

如何将语言字段变成数组?最终结果应该看起来像这样:

_id: ObjectId('61e1312ad435c7124aa883a1')
name: "Brian"
languages: [
    "English",
    "Spanish",
    "French"
]

_id: ObjectId('52e1312ad435c7124aa883a2')
name: "Max"
languages: [
    "English"
]

_id: ObjectId('37e1312ad435c7124aa883a9')
name: "Mike"
languages: []

I have three documents that looks like this:

_id: ObjectId('61e1312ad435c7124aa883a1')
name: "Brian"
languages: "English,Spanish,French"

_id: ObjectId('52e1312ad435c7124aa883a2')
name: "Max"
languages: "English"

_id: ObjectId('37e1312ad435c7124aa883a9')
name: "Mike"
languages: ""

As you can see, the languages field can either be empty, have one item, or multiple items separated by commas.

How can I turn the languages field into an Array? The end result should look like this:

_id: ObjectId('61e1312ad435c7124aa883a1')
name: "Brian"
languages: [
    "English",
    "Spanish",
    "French"
]

_id: ObjectId('52e1312ad435c7124aa883a2')
name: "Max"
languages: [
    "English"
]

_id: ObjectId('37e1312ad435c7124aa883a9')
name: "Mike"
languages: []

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

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

发布评论

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

评论(1

小镇女孩 2025-02-14 02:38:25

您可以使用 $ split :

db.collection.aggregate([
  {
    $addFields: {
      "languages": {
        $filter: {
          input: {
            $split: [
              "$languages",
              ","
            ]
          },
          cond: {
            $gt: [
              {
                $strLenCP: "$this"
              },
              0
            ]
          }
        }
      }
    }
  }
])

mongo playground

如果您想更新整个集合带有“管道更新”语法:

db.collection.updateMany(
{},
[
  {
    "$set": {
      "languages": {
        $filter: {
          input: {
            $split: [
              "$languages",
              ","
            ]
          },
          cond: {
            $gt: [
              {
                $strLenCP: "$this"
              },
              0
            ]
          }
        }
      }
    }
  }
])

You can use $split to do this, like so:

db.collection.aggregate([
  {
    $addFields: {
      "languages": {
        $filter: {
          input: {
            $split: [
              "$languages",
              ","
            ]
          },
          cond: {
            $gt: [
              {
                $strLenCP: "$this"
              },
              0
            ]
          }
        }
      }
    }
  }
])

Mongo Playground

If you want to update the entire collection you can use the same pipelined within an update with the "pipelined update" syntax:

db.collection.updateMany(
{},
[
  {
    "$set": {
      "languages": {
        $filter: {
          input: {
            $split: [
              "$languages",
              ","
            ]
          },
          cond: {
            $gt: [
              {
                $strLenCP: "$this"
              },
              0
            ]
          }
        }
      }
    }
  }
])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文