我有一张桌子上的东西链接了
_id title provider_id product_id price
1 a 20 1 50
2 b 21 1 30
3 c 23 1 60
4 d 20 2 50
5 e 21 2 20
6 f 20 3 80
7 g 21 3 60
8 h 23 3 50
我想要得到的是,选择具有最高价格且具有不同的 product_id 的行,这样我就可以定义产品并知道哪个提供者< / strong>。
我知道mongodb distinct
不支持sort
,所以我已经尝试过了:
db.getCollection('product_details').aggregate([
{$match: {_id: {$ne: null}}},
{$group: {_id: {_id:"$product_id"}}},
{$sort: {price: 1}},
{$limit:20},
{$skip:0}
])
但是mongodb仅给出product_id作为_id,这是合理的原因,但是它没有用。 是否可以通过不同的product_id获取所有对象(或行)并同时对其进行排序?
ps:{$match: {_id: {$ne: null}}}
是我的简单条件。
tnx
答案 0 :(得分:2)
由于您需要整个物品,请尝试以下操作:
db.yourCollectionName.aggregate([{$match: {_id: {$ne: null}}},
{ $sort: { price: -1 } },
{ $group: { _id: '$product_id', data: { $push: '$$ROOT' } } },
{ $project: { _id: 0, data: { $arrayElemAt: ["$data", 0] } } },
{ $replaceRoot: { newRoot: "$data" } }])
{$match: {_id: {$ne: null}}}
并没有真正帮助您,因为_id
除非插入,理想情况下不会为null,因为它也是唯一的,它可能只存在于一个文档中。