Как ограничить количество результатов при использовании драйвера Java для mongo db? - PullRequest
4 голосов
/ 28 августа 2010

http://api.mongodb.org/java/2.1/com/mongodb/DBCollection.html#find(com.mongodb.DBObject,com.mongodb.DBObject,int,int)

Использование этого с Grails и плагином mongo db.

Вот код, который я использую ... не знаю почему, но курсор возвращает весь наборданные.В этом случае я просто пытаюсь вернуть первые 20 совпадений (с is_processed = false):

def limit = {
    def count = 1;
    def shape_cursor = mongo.shapes.find(new BasicDBObject("is_processed", false),new BasicDBObject(),0,20);
    while(shape_cursor.hasNext()){
        shape_cursor.next();
        render "<div>" + count + "</div"
        count++;
    }
}

У кого-нибудь есть идея?

Ответы [ 2 ]

5 голосов
/ 28 августа 2010

limit - это метод DBCursor: DBCursor.limit (n) .

Так что вам просто нужно сделать

def shape_cursor = mongo.shapes.find(...).limit(20);
3 голосов
/ 28 августа 2010

В соответствии с JavaDoc, который вы связали со вторым параметром int, это не максимальное возвращаемое число, а

batchSize - если положительное, это число объектов в пакете, отправленных обратно из базы данныхвсе соответствующие объекты будут возвращены.если batchSize <0, это жесткое ограничение, и только 1 партия будет либо batchSize, либо #, который умещается в партии </p>

Возможно, отрицательное число (-20) будет делать то, что вы хотите, но япосчитайте приведенное выше утверждение слишком запутанным, чтобы быть уверенным в этом, поэтому я бы установил для batchSize значение 20, а затем отфильтровал код вашего приложения.

Возможно, подайте это как запрос об ошибке / функции.Должен быть способ указать пропуск / лимит, который работает так же, как в интерфейсе оболочки.(Обновление: и есть, в классе курсора, см. Другой ответ).

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