我希望获得包含所有字段的文档,以便在我的集合中使用特定字段聚合$ 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" }
}
}
]
);
提前致谢
答案 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" }
}
}
])