选择$ min的字段的最小值并在mongodb中汇总

时间:2016-12-29 14:53:51

标签: node.js mongodb aggregation-framework

我希望获得包含所有字段的文档,以便在我的集合中使用特定字段聚合$ min。

以下是我的收藏结构

{
"_id" : ObjectId("585e7454b0a2683a0f6a3617"),
"postid":100,
"region" : "IN",
"brand" : "Uber",
"used" : 4
}

{
"_id" : ObjectId("585e7454b0a2683a0f6a35b7"),
"postid":101,
"region" : "UK",
"brand" : "Airbnb",
"used" : 7
}

{
"_id" : ObjectId("585e7454b0a2683a0f6a3619"),
"postid":102,
"region" : "US",
"brand" : "Uber",
"used" : 9
}
{
"_id" : ObjectId("585e7454b0a2683a0f6a3619"),
"postid":103,
"region" : "US",
"brand" : "Airbnb",
"used" : 2
}
{
"_id" : ObjectId("585e7454b0a2683a0f6a3619"),
"postid":104,
"region" : "US",
"brand" : "Home",
"used" : 17
}

我希望获得具有$ min值的文档品牌的独特价值'使用'领域。

我希望获得这样的输出,

{
"_id" : ObjectId("585e7454b0a2683a0f6a3617"),
"postid":100,
"region" : "IN",
"brand" : "Uber",
"used" : 4
}

{
"_id" : ObjectId("585e7454b0a2683a0f6a3619"),
"postid":103,
"region" : "US",
"brand" : "Airbnb",
"used" : 2
}
{
"_id" : ObjectId("585e7454b0a2683a0f6a3619"),
"postid":104,
"region" : "US",
"brand" : "Home",
"used" : 17
}

目前我正在使用此查询,

db.sales.aggregate(
[
 {
   $group:
     {
       _id: "$brand",
       used: { $min: "$used" }
     }
 }
]
);

提前致谢

1 个答案:

答案 0 :(得分:2)

如果您想在群组中添加其他字段,请在订购文档后更好地使用 $first $last 累加器。在这种情况下,您希望首先使用 $sort 运算符作为第一个管道步骤,然后按升序对文档进行分组:

db.sales.aggregate([
    { "$sort": { "brand": 1, "used": 1 } },
    {
        "$group": {
            "_id": "$brand",
            "postid": { "$first": "$postid" },
            "region": { "$first": "$region" },
            "docId": { "$first": "$_id" },
            "used": { "$first": "$used" }
        }
    }
])