背景
我有一个mongo查询:
db.items.aggregate([
{$match: {"tags": "white"}},
{$lookup: {"from": "tags", "localField": "tags", "foreignField": "_id", as: "TagDetails" }},
{$unwind: "$TagDetails"},
{$group: { _id: "$TagDetails.tagvalue", cost: { $sum : "$cost"}}}
]);
请注意,假设匹配项位于lookup
上,_id
将仅返回单个项目数组。
我使用最后一个unwind
命令将每个数组转换为整数。我感觉这是次优的破解。
问题
将数组转换为单个聚合中项的“正确”方法是什么?
到目前为止
我正在尝试使用$reduce
,但由于reduce是管道运算符而不是管道阶段,因此我无法使语法起作用。
db.items.aggregate([
{$match: {"tags": "white"}},
{$lookup: {"from": "tags", "localField": "tags", "foreignField": "_id", as: "TagDetails" }},
{$reduce: { input:"$TagDetails", initialValue: "", in: { $concat: ["$$value","$$this"]}}
{$group: { _id: "$TagDetails.tagvalue", cost: { $sum : "$cost"}}}
]);