Морфия - первый лимит, чем фильтр

Есть ли способ написать запрос в 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 этап сам по себе и добавить другие этапы, чтобы увидеть, как он меняет результат запроса

Другие вопросы по тегам