Perl mongodb $ collecton-> find :: Сколько обращений к mongodb при получении? - PullRequest
3 голосов
/ 26 марта 2011

Если в моей коллекции 10 записей.

my $records = $collection->find;
while (my $record = $records->next){
   do something;
}

Есть ли десять обращений к серверу mongodb?Если это так, есть ли способ ограничить его одной поездкой туда и обратно?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 01 апреля 2011

Ответ - это всего лишь один запрос на пакет записей / документов, возвращаемых по умолчанию группами по 100.

Если ваш результирующий набор составляет 250 документов, то при первом обращении курсора к документу 1 документы 1-100 будут загружены в память, при обращении к документу 101 это приведет к загрузке еще 100 документов с сервера и, наконец, одного больше запросов за последние 50 документов.

См. Документы mongodb о курсорах и команде "getmore".

2 голосов
/ 26 марта 2011

Нет, я абсолютно уверен, что в приведенном выше коде только один прием на сервер.Например, в c# один и тот же код загрузит все данные только один раз, когда вы начнете итерацию.

while (my $record = $records->next){
                               ^^^
                         here on first iteration driver load all 10 records      

Мне кажется логичным иметь только один запрос к серверу.

Из документации :

Оболочка найти () метод возвращает объект курсора, который мы можем затем повторить для извлечения конкретных документов из результата

2 голосов
/ 30 марта 2011

Это один запрос, как запрос к СУБД.

Согласно документации:

  my $cursor = $collection->find({ i => { '$gt' => 42 } });

Выполняет данный $ запрос и возвращает MongoDB :: Cursor с результатами

  my $cursor = $collection->query({ }, { limit => 10, skip => 10 });

Допустимые атрибуты запроса:

  • limit - Ограничить количество результатов.
  • Пропустить - пропустить ряд результатов.
  • sort_by - Результаты заказа.
1 голос
/ 26 марта 2011

Вы можете использовать инструмент "mongosniff", чтобы выяснить операции над проводом. Кроме того: у вас в принципе нет другого выбора, кроме как перебирать курсор ... так почему вас это волнует?

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