Запрос mongodb для поддержания порядка с использованием оператора $ in - PullRequest
0 голосов
/ 14 августа 2011

У меня есть список URL-адресов (ресурсов) и список представлений для каждого ресурса, все они хранятся в базе данных mongodb.Другими словами, у resource есть много связанных views.

. И ресурсы, и представления содержат поле url, которое я использую для идентификации веб-сайта, о котором ресурс и представление.

У меня есть список URL-адресов в переменной urls, и я хочу вернуть для каждого из них в том же порядке URL-адреса , только одно из представлений, который связан с этим URL.

Итак, мне интересны два критерия:

  • Запрос с использованием оператора $ in, сохраняющий порядок результатов относительносписок, который я пропустил.
  • Возвращает только один элемент для каждого ключа в списке $ in.

Конечно, я могу перебирать свой код и делать что-то подобное (в python)):

views = []
for url in urls:
    views.append(db.views.find_one({"url": url}))

Я не знаю, как точно ведет себя оператор $in и может ли он решить мою проблему, но я боюсь, что он не сохранит интересующий меня порядок. Может бытья могу отсортировать результаты после запроса?

Но это означает, что нужно сделать N запросов для N URL, которыеOes не кажется оптимизированным на всех.Есть ли способ избежать этого?

1 Ответ

2 голосов
/ 15 августа 2011

К сожалению, в настоящее время это невозможно. Для $ in нет гарантии заказа (проверьте с помощью db.test.save({a:1}); db.test.save({a:2}); db.test.find({a:{$in:[2,1]}})), и в настоящее время вы можете сортировать только по полям, а не по фиксированным упорядоченным наборам значений.

...