我有一个名为 product 的 MongoDB 集合,它包含以下文档,如下所示。
{
"product" : "Milk",
"barcode" : 12345,
"price" : 100,
"store" : "BestBuy"
},
{
"product" : "Milk",
"barcode" : 12345,
"price" : 100,
"store" : "WalMart"
},
{
"product" : "Milk",
"barcode" : 12345,
"price" : 130,
"store" : "Target"
},
{
"product" : "Milk",
"barcode" : 12345,
"price" : 500,
"store" : "Game"
}
我希望查询集合并只返回价格最低的文档,例如
{
product: "Milk",
barcode: 12345,
price: 100,
store: "BestBuy"
}
{
product: "Milk",
barcode: 12345,
price: 100,
store: "WalMart"
}
但是当我运行聚合查询时:
db.test.aggregate([{$match:{barcode:1234}},{$group: {_id:"$name", price: {$min:"$price"} } }])
它只返回一个文档。
最佳答案
您需要$group
您的文件按“价格”。从那里,你$sort
它们按“_id”升序排列并使用 $limit
返回第一个文档,即具有最小值的文档。
db.products.aggregate([
{ "$group": {
"_id": "$price",
"docs": { "$push": "$$ROOT" }
}},
{ "$sort": { "_id": 1 } },
{ "$limit": 1 }
])
产生类似的东西:
{
"_id" : 100,
"docs" : [
{
"_id" : ObjectId("574a161b17569e552e35edb5"),
"product" : "Milk",
"barcode" : 12345,
"price" : 100,
"store" : "BestBuy"
},
{
"_id" : ObjectId("574a161b17569e552e35edb6"),
"product" : "Milk",
"barcode" : 12345,
"price" : 100,
"store" : "WalMart"
}
]
}
关于mongodb - 如何获得 MongoDB 集合中的最低值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37501925/