假设我们有 2 个卖家 A 和 B。我们获取了一组数据如下(假设零件编号相同,或者您也可以更改它):
/* 1 createdAt:18/10/2019, 16:48:35*/
{
"_id" : ObjectId("5da99f8bd4ce6a7d8bebb442"),
"partNumber" : 1,
"seller" : "B",
"price" : 15,
"createdAt" : ISODate("2019-10-11T16:13:31.451+05:30")
},
/* 2 createdAt:18/10/2019, 16:48:35*/
{
"_id" : ObjectId("5da99f8bd4ce6a7d8bebb441"),
"partNumber" : 1,
"seller" : "A",
"price" : 1,
"createdAt" : ISODate("2019-10-11T16:13:31.451+05:30")
},
/* 3 createdAt:18/10/2019, 16:48:35*/
{
"_id" : ObjectId("5da99f8bd4ce6a7d8bebb440"),
"partNumber" : 1,
"seller" : "B",
"price" : 10,
"createdAt" : ISODate("2019-10-10T16:13:31.451+05:30")
},
/* 4 createdAt:18/10/2019, 16:48:35*/
{
"_id" : ObjectId("5da99f8bd4ce6a7d8bebb43f"),
"partNumber" : 1,
"seller" : "A",
"price" : 10,
"createdAt" : ISODate("2019-10-10T16:13:31.451+05:30")
},
/* 5 createdAt:18/10/2019, 16:48:35*/
{
"_id" : ObjectId("5da99f8bd4ce6a7d8bebb43e"),
"partNumber" : 1,
"seller" : "B",
"price" : 7,
"createdAt" : ISODate("2019-10-09T16:13:31.451+05:30")
},
/* 6 createdAt:18/10/2019, 16:48:35*/
{
"_id" : ObjectId("5da99f8bd4ce6a7d8bebb43d"),
"partNumber" : 1,
"seller" : "A",
"price" : 5,
"createdAt" : ISODate("2019-10-09T16:13:31.451+05:30")
}
我们的查询如下:
db.collection.aggregate([
{
$group: {
_id: { seller: "$seller", partNumber: "$partNumber" },
lastSalesPrice: { $last: "$price" },
firstSalesPrice: { $first: "$price" },
}
},
{
$project: {
seller: "$_id.seller",
partNumber: "$_id.partNumber",
lastSalesPrice: "$lastSalesPrice",
firstSalesPrice: "$firstSalesPrice",
diff: { $subtract: ["$lastSalesPrice", "$firstSalesPrice" ] }
}
},
{
$sort: { "diff": -1 }
}
])
以上查询结果如下:
/* 1 */
{
"_id" : {
"seller" : "B",
"partNumber" : 1
},
"seller" : "B",
"partNumber" : 1,
"lastSalesPrice" : 15,
"firstSalesPrice" : 7,
"diff" : 8
},
/* 2 */
{
"_id" : {
"seller" : "A",
"partNumber" : 1
},
"seller" : "A",
"partNumber" : 1,
"lastSalesPrice" : 1,
"firstSalesPrice" : 5,
"diff" : -4
}