Запрос MongoDB для последних элементов до - PullRequest
0 голосов
/ 29 августа 2011

Учтите, у меня есть две коллекции в MongoDB.Один для продуктов с такими документами, как:

{'_id': ObjectId('lalala'), 'title': 'Yellow banana'}

А другой хранит изменения цен с такими документами, как:

{'product': DBRef('products', ObjectId('lalala')),
 'since': datetime(2011, 4, 5),
 'new_price': 150 }

Один продукт может иметь много ценовых изменений.Цена длится до нового изменения с более поздней отметкой времени.Я думаю, вы поймали идею.

Скажи, у меня есть 100 продуктов.Я хочу запросить мою БД, чтобы узнать, какова цена каждого продукта на момент 9 июня 2011 года. Какой самый эффективный (быстрый) способ выполнить этот запрос в MongoDB?Предположим, у меня нет решения для кеша или кеш пуст.

Я думал о group операторе для коллекции prices, где функция Reduce выбрала бы последнюю since перед предоставленной датой, группируя по product.$id.Но в этом случае я не воспользуюсь индексом для поля since, и все документы будут отсканированы.

Есть идеи?

1 Ответ

1 голос
/ 29 августа 2011

У меня была похожая проблема, но для локаций GPS. Я обнаружил, что самым быстрым способом было настроить запрос для каждого элемента, что довольно нелогично, если вы привыкли к базам данных SQL.

Запросите элемент, отметка времени которого меньше или равна дате, которую вы ищете, и ограничьте результат 1. Повторите для каждого элемента. Чтобы действительно ускорить процесс, запустите несколько запросов параллельно, чтобы использовать все ядра на сервере MongoDB.

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