【问题标题】:How to extract the field of an array element in MongoDB Aggregation?如何在 MongoDB Aggregation 中提取数组元素的字段?
【发布时间】:2021-08-05 14:30:55
【问题描述】:

所以,我的文档就像下面的例子。

{
    image: {imageUrl: "http://imageurlsite.com/xyz"},
    additionalImages: [
        {imageUrl: "http://imageurlsite.com/pdq"},
        {imageUrl: "http://imageurlsite.com/lol"},
        {imageUrl: "http://imageurlsite.com/zomg"}
    ]
}

使用 MongoDB 聚合管道,如何从 imageadditionalImages 创建一个新的数组字段没有包括 imageUrl 部分?我想要这样的新字段:

[
    "http://imageurlsite.com/xyz", 
    "http://imageurlsite.com/pdq",
    "http://imageurlsite.com/lol",
    "http://imageurlsite.com/zomg"
]

我尝试在$group 阶段使用以下内容,这部分可行,但我只想要字符串值。

{
  image: {$addToSet: "$image"},
  additionalImages: {$addToSet: "$additionalImages"}
}

不幸的是,上面的结果给了我这个;

[
    {imageUrl: "http://imageurlsite.com/xyz"}, 
    {imageUrl: "http://imageurlsite.com/pdq"},
    {imageUrl: "http://imageurlsite.com/lol"},
    {imageUrl: "http://imageurlsite.com/zomg"}
]

【问题讨论】:

    标签: arrays mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    演示 - https://mongoplayground.net/p/KOSCPLetrZO

    db.collection.aggregate([
      {
        $group: {
          _id: null,
          image: { $addToSet: "$image.imageUrl" }, // take imageUrl 
          additionalImages: { $addToSet: "$additionalImages.imageUrl" } // take imageUrl
        }
      },
      {
        $set: {
          images: {
            "$concatArrays": [ // combine both arrays
              { "$first": "$additionalImages" },
              "$image"
            ]
          }
        }
      },
      {
        "$project": { images: 1 } // project only images
      }
    ])
    

    输出 -

    [
      {
        "_id": null,
        "images": [
          "http://imageurlsite.com/pdq",
          "http://imageurlsite.com/lol",
          "http://imageurlsite.com/zomg",
          "http://imageurlsite.com/xyz"
        ]
      }
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多