Сортировать данные из mongodb по убыванию - PullRequest
0 голосов
/ 16 февраля 2012

Я пытаюсь вывести историю чата пользователей, а затем поместить ее в объект JSON. Я хочу, чтобы сообщения выводились в порядке убывания, но при попытке $cursor->sort() выбрасывает 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"
   }
}

1 Ответ

3 голосов
/ 16 февраля 2012

Ваша проблема в том, что вы пытаетесь отсортировать вложенные документы, тогда как функция .sort () предназначена для сортировки документов.

Итак, каждый объект в коллекции - это документ, в данном случае каждый чат - это документ. Вы можете отсортировать свои чаты с помощью .sort (), но в ваших документах (вложенных документах) есть вложенные документы, называемые сообщениями, и Mongo не сортирует их для вас.

См. Некоторые ответы на аналогичный вопрос здесь: Сортировка вложенных документов в MongoDB

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...