MongoDB 在限制后对结果进行排序

neo*_*ert 3 sorting limit mongodb

有没有办法对从限制返回的文件进行排序?例子:

//returns 10 documents:
db.users.find()
.sort({last_online_timestamp:-1})
.limit(10) 

//returns 10 another documents
db.users.find()
.sort({last_online_timestamp:-1})
.limit(10)
.sort({messages_count:1}); 
Run Code Online (Sandbox Code Playgroud)

我想要的是获取 10 个最后登录的用户,然后按消息数对它们进行排序。

Jef*_*f J 7

您可以使用聚合,例如

db.users.aggregate([
    {"$sort": {"last_online_timestamp":1}},
    {"$limit": 10},
    {"$sort": {"messages_count": 1}}
])
Run Code Online (Sandbox Code Playgroud)

这将经历集合中的文档将是:

  1. last_online_timestamp字段升序排序
  2. 仅限 10 个文件
  3. 这 10 个文档将按messages_count字段升序排序

您可能需要改变{"$sort": {"last_online_timestamp":1},以{"$sort": {"last_online_timestamp":-1}根据实际值last_online_timestamp

有关 Mongo 聚合的更多信息,请参阅https://docs.mongodb.com/manual/aggregation/

  • 我不认为 `db.users.find().sort({last_online_timestamp:-1}).limit(10).sort({messages_count:1})` 会起作用。根据文档,排序总是在 limit 之前应用,而不管您写入的顺序如何。 (2认同)