Как получить документы с помощью mongoDB? - PullRequest
2 голосов
/ 11 января 2011

У меня есть приложение, которое запрашивает данные из mongoDB с помощью драйвера mongoDB C # примерно так:

public void main()  
{
   foreach (int i in listOfKey)
   {
      list.add(getObjectfromDB(i);
   } 
}

public myObject getObjFromDb(int primaryKey)
{
   document query = new document();
   query["primKey"] = primaryKey;
   document result= mongo["myDatabase"]["myCollection"].findOne(query);
   return parseObject(result);
}

На моей локальной (разрабатываемой) машине для получения 100 объектов таким способом требуется меньше секунды.Однако недавно я переместил базу данных на сервер в Интернете, и этот запрос занимает около 30 секунд для того же числа объектов.

Кроме того, просматривая журнал mongoDB, он открывает около 8-10 соединений с БД для выполнения этого запроса.

Итак, я хотел бы запросить базу данных для массива primaryKeys и получить их все сразу, а затем выполнить анализ в цикле впоследствии, используя одно соединение, если это возможно.

Как я могу оптимизировать свой запрос для этого?
Спасибо,
--Michael

Ответы [ 2 ]

2 голосов
/ 12 января 2011

Вы хотите использовать $ in. $ or также будет работать, но более многословно и поддерживается только в новых версиях (я полагаю, пост 1.5.4).

2 голосов
/ 11 января 2011

звучит так, как будто вы ищете магическое выражение "$ in" в вашем запросе. я не знаком с C #, но в json вы будете искать запрос, похожий на:

query = {
   'primaryKey': {
      '$in': [
         'val1',
         'val2',
         'val3'
      ]
   }
}

Выше приведен список результатов в виде курсора при вызове .find (), в отличие от того, что вы делаете сейчас, когда вы отправляете единственный primaryKey и вызываете findOne ().

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

Надеюсь, это поможет! Не стесняйтесь задавать более конкретные вопросы в комментариях.

MongoDB $ или ссылка: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or

C # find () ссылка: http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-FindandFindAsmethods

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