node.js - Mongoose 首先按一个属性排序和限制,然后按另一个属性排序

标签 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 ;

最佳答案

每当查询有多个这样的步骤时,就会出现 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(...);

关于node.js - Mongoose 首先按一个属性排序和限制,然后按另一个属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35115131/

相关文章:

javascript - 无法使用 Mongoose 保存 JavaScript 对象

javascript - Node.js 延迟 Promisify + mongoose

javascript - svg 到 json.js |我的文件去哪儿了?

javascript - 返回 Unirest 客户端的 promise

node.js - 在 kubernetes 中使用 azure cosmos mongodb

node.js - MongoDB 更新对象并删除属性?

javascript - 如何在登录后重定向到页面,同时使用 Express 将 token 作为处理程序发送到中间件

ruby-on-rails - Mongoid - 保存和 update_attribute 不持久

MYSQL CDC(变更数据捕获)

javascript - 没有在方法前面等待就不会更新数据库