Запрос MongoDB: можно отсортировать по списку значений? - PullRequest
1 голос
/ 28 июня 2011

Я сомневаюсь, что в настоящее время это возможно с MongoDB, но я хотел бы знать, можно ли отсортировать набор результатов запроса по массиву значений в этом наборе результатов.Это было бы аналогично функциональности MySQL «ORDER BY FIELD».Краткий пример этой функциональности MySQL: http://pastebin.com/qtL1vKcM

Вот аналогичный пример того, что я пытаюсь выполнить в консоли mongodb: http://pastebin.com/LuKqA6b1

Я знаю, что большинство людей будетПредлагаю: сделать сортировку на стороне клиента / кода приложения.Тем не менее, это не выполнимо в моем случае.Я разбил на страницы набор результатов (т. Е. Комбинация skip () / limit ()).Сортировка в коде приложения потребует выбора всей коллекции в коде моего приложения, ее нефильтрования, сортировки и применения разбивки на страницы.

Мне нужно отсортировать набор результатов перед применением skip () / limit ().

Я думаю, что эта функциональность была бы чрезвычайно практичной.В моем случае я пытаюсь интегрировать функциональность Sphinx для поиска текста с MongoDB, сохраняя сортировку Sphinx по релевантности совпадений.Это работает так:

  1. Документы Sphinx хранятся с MongoID в качестве строкового атрибута.Это напрямую соответствует документу MongoDB.
  2. Когда пользовательский текстовый поиск выполняется, Sphinx запрашивается первым.MongoID из набора результатов Sphinx затем используются для запроса коллекции MongoDB (т. Е. Оператора $ in).
  3. Сортировка релевантности, предоставляемая набором результатов Sphinx, теряется.
  4. : (

Есть ли практический способ сделать это?

Ответы [ 2 ]

1 голос
/ 29 июня 2011

Это невозможно, но я полагаю, что вы можете вернуть выгружаемый результат из sphinx, загрузить соответствующие данные из mongodb с помощью оператора $in и затем отсортировать выгружаемый результат на стороне клиента в соответствии с сортировкой идентификатора sphinx.Кажется, это должно сработать для вас.

Ребята из Mongodb наверняка думают о «реальной» поддержке полнотекстового поиска (даже планируется jira функция), и я думаю, что это будет в ближайшее время (вероятно,в этом году).

0 голосов
/ 28 июня 2011

В настоящее время это невозможно, и простых обходных путей тоже нет.

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