在我的聚合管道中,經過一些先前的聚合后,我最終得到了類似于以下的檔案:
[
{
"_id": 0,
"group": "Electronics",
// other fields omitted for brevity
"articles": [
{
"name": "Gameboy",
// Even more fields omitted for brevity
"area": "Video Games"
},
{
"name": "Playstation",
"area": "Video Games"
},
{
"name": "Refrigerator",
"area": "White Goods"
}
]
},
{
"_id": 1,
"group": "Food",
"articles": [
{
"name": "Apple",
"area": "Fruit"
},
{
"name": "Pear",
"area": "Fruit"
}
]
}
]
我需要area從陣列中提取唯一值,同時保持檔案的其余部分完整無缺(articles雖然之后不需要)。結果應如下所示:
[
{
"_id": 0,
"group": "Electronics",
// other fields...
"articleAreas": [ "Video Games", "White Goods" ]
},
{
"_id": 1,
"group": "Food",
"articleAreas": [ "Fruit" ]
}
]
我的直覺是應該有某種方法可以使用$addToSet類似于可以$group分階段完成的操作,但我不知道如何使用。
uj5u.com熱心網友回復:
您可以嘗試$addFieldsstage 和$setUnionoperator 從陣列中獲取唯一值,
$addFields添加新欄位articleAreas$setUnion從值陣列中獲取唯一值articles.area
db.collection.aggregate([
{
$addFields: {
articleAreas: {
$setUnion: "$articles.area"
}
}
}
])
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/384750.html
