MongoDB在limit之后对结果进行排序
有没有办法对limit返回的文档进行排序? 例如:MongoDB在limit之后对结果进行排序,mongodb,sorting,limit,Mongodb,Sorting,Limit,有没有办法对limit返回的文档进行排序? 例如: 我想要的是获得10个最近登录的用户,然后按消息数对他们进行排序。您可以使用聚合,例如 db.users.aggregate([ {"$sort": {"last_online_timestamp":1}}, {"$limit": 10}, {"$sort": {"messages_count": 1}} ]) 这将经历以下几个阶段,集合中的文档将: 按last\u online\u timestamp字段升序排序 限于
我想要的是获得10个最近登录的用户,然后按消息数对他们进行排序。您可以使用聚合,例如
db.users.aggregate([
{"$sort": {"last_online_timestamp":1}},
{"$limit": 10},
{"$sort": {"messages_count": 1}}
])
这将经历以下几个阶段,集合中的文档将:
last\u online\u timestamp
字段升序排序消息\u count
字段按升序排序last\u online\u timestamp
的实际值,您可能需要将{“$sort”:{“last\u online\u timestamp”:1}
更改为{“$sort”:{“last\u online\u timestamp”:-1}
有关Mongo聚合的更多信息,请参阅。db.user.find().sort({last_online_timestamp:-1}).limit(10).pretty();db.user.find().sort({last_online_timestamp:-1}).limit(10,回调);试试这个……@RïshïKïshKümar如果你建议一个解决方案,你应该把它作为完整的答案发布,而不是作为评论发布。@Alexander Tyuryaev:不可能对find()使用sort()两次查询;这个问题以前已经解决过,例如or。相反,您需要使用聚合,正如Jeff J所建议的那样。我不认为
db.users.find().sort({last_online_timestamp:-1})。limit(10)。sort({messages_count:1})
将起作用。根据文档,排序总是在限制之前应用,而不管您以何种顺序写入。@Remowler您是正确的-语法已被接受,但结果不是预期的。我已更新了答案,仅包括聚合。谢谢!语法为“聚合”很难阅读。那一个更好:db.users.aggregate().sort({“last_online_timestamp”:1})。limit(10)。sort({“messages_count”:1});
db.users.aggregate([
{"$sort": {"last_online_timestamp":1}},
{"$limit": 10},
{"$sort": {"messages_count": 1}}
])