Получить все записи между двумя другими записями в MongoDB - PullRequest
1 голос
/ 06 января 2012

У меня есть коллекция MongoDB с объектами, свойство _id которой является строкой.

Я хочу выполнить операцию .find () для этой коллекции, выполнить .sort () для возвращенного курсора,Затем операция .toArray () выдаст мне массив документов в определенном порядке.Однако я не хочу извлекать все эти документы, а только те, которые находятся между ними.

Теперь я понимаю, что могу выполнить .toArray (), получить все свои результаты в массиве, а затем выбрать интервал между двумя документами, но это будет стоить слишком много ресурсов.Я хочу, если возможно, выбрать этот интервал ПЕРЕД выполнением .toArray () или вообще наиболее ресурсосберегающим способом.

То, что я пытаюсь выполнить, является альтернативой .limit ()и .skip () (paging), но точно определяя интервал, предоставляя _id для «начального» и «конечного» документа.

Например, если .find().sort({_id: 1}).toArray() дает:

{_id: "a", a: "First entry"},
{_id: "bar", a: "Third entry"},
{_id: "bar2", a: "Fourth entry"},
{_id: "bar3", a: "Fifth entry"},
{_id: "bar4", a: "Sixth entry"},
{_id: "foo", a: "SEcond entry"}

Мне нужно что-то вроде find().sort({_id: 1}).allAfter({_id: "bar"}).allBefore({_id: "bar4"}).toArray(...); Чтобы дать мне:

{_id: "bar2", a: "Fourth entry"},
{_id: "bar3", a: "Fifth entry"},

Ответы [ 2 ]

1 голос
/ 08 января 2012

То, о чем вы говорите, это разбивка на страницы диапазона (где диапазон находится на сортировке).Вы можете сделать это легко, отслеживая край предыдущей и следующей страниц.Вот некоторые из существующих ответов:

Пейджинг на основе диапазона mongodb

Как выполнить разбиение на страницы с использованием запросов диапазона в MongoDB?

http://groups.google.com/group/mongodb-user/browse_thread/thread/dc46592112735bf0/a5c700b1283537d8

Дайте мне знать, если этого недостаточно для ваших нужд.

0 голосов
/ 06 января 2012

Похоже, вы подразумеваете порядок вставки: «bar» был вставлен перед «a», а «foo», но после «bar2».

Вы не можете выполнять запрос по порядку вставки в mongodb (возможно, из-за того, что mongo иногда переупорядочивает документы в коллекции, например, если вы обновляете "bar2" и недостаточно выделенного пространства, mongo может поместить егофизически позади "bar4").

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

...