繁体   English   中英

通过降序对mongodb中的数据进行排序

[英]Sort data from mongodb by decending order

我试图输出用户的聊天记录,然后将其放入JSON对象,我希望消息以降序显示,但是当我尝试$cursor->sort() ,将Call to a member function sort() on a non-object扔给Call to a member function sort() on a non-object

$cursor = $collection->findOne(array('chatbetween' => $channel_name));
$cursor->sort(array('messages' => -1));
$messages = array();

for($i=0; $i<count($cursor['messages']); $i++){
    $object = array('message'=>$cursor['messages'][$i]['message'],
                    'time'=>date('Y-m-d\TH:i:s\Z', $cursor['messages'][$i]['time']->sec),
                    'user'=>$cursor['messages'][$i]['user']);

    $messages[] = $object;
}
echo json_encode($messages);

这是集合的外观。

"_id": ObjectId("4f3c19e37edae1723d000000"),
   "chatbetween": "private-4f3bb96d7edae1850b0000004f3c0d2d7edae1e935010000",
   "messages"▼: {
      "0": {
       "user": "4f3c0d2d7edae1e935010000",
       "time": ISODate("2012-02-15T20: 47: 30.175Z"),
       "message": "message1"
     },
      "1": {
      "user": "4f3bb96d7edae1850b000000",
      "time": ISODate("2012-02-15T20: 47: 37.79Z"),
      "message": "message2"
    },
      "2": {
      "user": "4f3c0d2d7edae1e935010000",
      "time": ISODate("2012-02-15T20: 47: 43.295Z"),
      "message": "message3"
   }
}

您的问题是您正在尝试对子文档进行排序,而.sort()函数用于对文档进行排序。

因此,集合中的每个对象都是一个文档-在这种情况下,每个聊天都是一个文档。 您可以使用.sort()对聊天进行排序,但是在文档(子文档)中有称为消息的子文档,而Mongo不会为您排序。

在此处查看类似问题的一些答案: 在MongoDB中对子文档进行排序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM