所以,我的文档就像下面的例子。
{
image: {imageUrl: "http://imageurlsite.com/xyz"},
additionalImages: [
{imageUrl: "http://imageurlsite.com/pdq"},
{imageUrl: "http://imageurlsite.com/lol"},
{imageUrl: "http://imageurlsite.com/zomg"}
]
}
使用 MongoDB 聚合管道,如何从 image
和 additionalImages
不创建新的数组字段,包括 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"}
]
答案 0 :(得分:2)
演示 - 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"
]
}
]