Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB在limit之后对结果进行排序_Mongodb_Sorting_Limit - Fatal编程技术网

MongoDB在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字段升序排序 限于

有没有办法对limit返回的文档进行排序? 例如:


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

您可以使用聚合,例如

db.users.aggregate([
    {"$sort": {"last_online_timestamp":1}},
    {"$limit": 10},
    {"$sort": {"messages_count": 1}}
])
这将经历以下几个阶段,集合中的文档将:

  • last\u online\u timestamp
    字段升序排序
  • 限于10份文件
  • 这10个文档将按
    消息\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}}
    ])