MongoDB选择一个对象并按不同字段排序

时间:2019-12-03 20:00:25

标签: mongodb mongodb-query

我有一张桌子上的东西链接了

_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

1 个答案:

答案 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,因为它也是唯一的,它可能只存在于一个文档中。