Mongoose首先排序并限制一个属性,然后按另一个属性排序

时间:2016-01-31 14:48:23

标签: node.js mongodb mongoose

如何获取具有最高计数的n个数据集但返回按名称排序?

我尝试了以下操作,但这不起作用。

db.Foo
      .find()
      .sort({'count': -1})
      .limit(n)
      .sort({'name': 1}) // does not work
      .exec(...);

除了手动排序返回的json数组外,还有其他解决方案吗?

如SQL中的子查询?

SELECT *
FROM
( SELECT *
  FROM Foo
  ORDER BY count DESC
  LIMIT n
) AS tmp
ORDER BY name ASC ;

2 个答案:

答案 0 :(得分:4)

每当查询包含多个这样的步骤时,通常就会出现aggregate管道:

db.Foo.aggregate([
    // Sort all the doc on count, descending
    {$sort: {count: -1}},
    // Take the first n of those
    {$limit: n},
    // Resort those n docs on name
    {$sort: {name: 1}}
]).exec(...);

答案 1 :(得分:0)

您需要在一个类别中添加两个条件

db.Foo
  .find()
  .sort({'count': -1,'name': 1})
  .limit(n)
  .exec(...);