猫鼬首先按一个属性排序和限制,然后按另一个属性排序

Tob*_*ias 2 mongoose mongodb node.js

如何获得计数最高的n个数据集,然后按名称返回它们?

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

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

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

像SQL中的子查询?

SELECT *
FROM
( SELECT *
  FROM Foo
  ORDER BY count DESC
  LIMIT n
) AS tmp
ORDER BY name ASC ;
Run Code Online (Sandbox Code Playgroud)

Joh*_*yHK 5

每当查询具有这样的多个步骤时,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(...);
Run Code Online (Sandbox Code Playgroud)