Морфия - первый лимит, чем фильтр
Есть ли способ написать запрос в Morphia, который будет ограничивать в первую очередь и после этого выполнить фильтр на ограниченный результат?
пример:
У меня есть десять тысяч строк в таблице. Я хочу выбрать первые сто строк. чем отфильтровать ограниченный большой запрос с большим количеством строк и получить результат.
И я не хочу материализовать результат сотен строк в процессе.
Спасибо
1 ответ
Используйте структуру агрегации: db.collection.aggregate({...})
Там у вас есть конвейер, в котором вы можете вызывать операции в нужном порядке. Он поддерживает $match, $sort, $limit и $offset. И вы даже можете вызвать операцию несколько раз.
Вот быстрый пример, который соответствует вашим требованиям:
db.blog.insert({ timestamp: 4, anonymous: false, rating: 2, views: 10 })
db.blog.insert({ timestamp: 5, anonymous: true, rating: 2, views: 5 })
db.blog.insert({ timestamp: 3, anonymous: true, rating: 1, views: 21 })
db.blog.insert({ timestamp: 1, anonymous: false, rating: 3, views: 20 })
db.blog.insert({ timestamp: 2, anonymous: false, rating: 5, views: 25 })
db.blog.aggregate([
{ $sort: { timestamp: 1 } },
{ $limit: 3 },
{ $match: { anonymous: false } },
{ $sort: { views: -1 } }
])
Начните с $sort
этап сам по себе и добавить другие этапы, чтобы увидеть, как он меняет результат запроса