繁体   English   中英

如何提取MongoDB聚合中数组元素的字段?

[英]How to extract the field of an array element in MongoDB Aggregation?

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

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

使用 MongoDB 聚合管道,如何在包含imageUrl部分的情况下从imageadditionalImages创建新的数组字段? 我想要这样的新字段:

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

演示 - 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
  }
])

Output -

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM