У меня есть коллекция mongodb, содержащая множество книг со многими полями.Вот некоторые ключевые поля, которые имеют отношение к моему вопросу:
{
book_id : 1,
book_title :"Hackers & Painters",
category_id : "12",
related_topics : [ {topic_id : "8", topic_name : "Computers"},
{topic_id : "11", topic_name : "IT"}
]
...
... (at least 20 fields more)
...
}
У нас есть форма для фильтрации результатов (с большим количеством входов / выбора) на нашей странице поиска.И, конечно же, есть нумерация страниц.С отфильтрованными результатами мы показываем все категории на странице.Для каждой категории число результатов, найденных в этой категории, также отображается на странице.
Мы стараемся использовать MongoDB вместо PostgreSQL.Потому что производительность и скорость - наша главная забота об этом процессе.
Теперь вопрос в следующем:
Я могу легко отфильтровать результаты, используя функцию "найти" со всеми параметрами фильтра.Это круто.Я могу разбить на страницы результаты с помощью функций пропуска и ограничения:
$data = $lib_collection->find($filter_params, array())->skip(20)->limit(20);
Но мне нужно собрать количество результатов, найденных для каждого category_id и topic_id, прежде чем произойдет разбиение на страницы.И я не хочу «предвидеть» все результаты, собирать категории и управлять разбиением на страницы с помощью PHP, потому что отфильтрованные данные часто содержат почти 200 000 результатов.
Проблема 1: Я обнаружил mongodb:: command () функция в руководстве по PHP с «отличным» примером.Я думаю, что я получаю различные значения этим методом.Но командная функция не принимает условные параметры (для фильтрации).Я не знаю, как применить те же параметры фильтра при запросе различных значений.
Проблема 2: Даже если есть способ отправки параметров фильтра с помощью функции mongodb :: command, эта функция будет другим запросом в процессе и займет примерно то же время (возможно, больше)с предыдущим запросом я думаю.И это будет очередной штраф скорости.
Задача 3: Чтобы получить разные topic_ids с количеством результатов, будет другой запрос, другое штраф скорости: (*
IЯ новичок в работе с MongoDB. Возможно, я смотрю на проблемы с неправильной точки зрения. Можете ли вы помочь мне решить проблемы и высказать свое мнение о самом быстром способе получения:
- отфильтрованных результатов
- нумерация страниц
- отдельные значения с количеством найденных результатов
из большого набора данных.