C# 如何使用mongoDB批量检索文档?

C# 如何使用mongoDB批量检索文档?,c#,optimization,mongodb,C#,Optimization,Mongodb,我有一个使用mongoDB C#驱动程序从mongoDB查询数据的应用程序,如下所示: public void main() { foreach (int i in listOfKey) { list.add(getObjectfromDB(i); } } public myObject getObjFromDb(int primaryKey) { document query = new document(); query["primKey"]

我有一个使用mongoDB C#驱动程序从mongoDB查询数据的应用程序,如下所示:

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个对象不到一秒钟。但是,我最近将数据库移动到了internet上的服务器上,对于相同数量的对象,执行此查询大约需要30秒

此外,查看mongoDB日志,它似乎打开了大约8-10个到DB的连接来执行此查询

所以我想做的是让查询数据库中的一个primaryKeys数组,并立即将它们全部返回,然后在循环中进行解析,如果可能的话,使用一个连接

如何优化查询以实现此目的?
谢谢,

--Michael

听起来你要找的是你查询中神奇的“$in”语句。我不熟悉C#,但在json中,您会看到类似于以下内容的查询:

query = {
   'primaryKey': {
      '$in': [
         'val1',
         'val2',
         'val3'
      ]
   }
}
在调用.find()时,上面将返回一个结果列表作为游标,而不是现在提交一个primaryKey并调用findOne()

find()返回一个游标(与findOne()相反,findOne()返回一个数据结构),因此要访问数据,您必须遍历游标对象来获取每个文档

希望这有帮助!欢迎在评论中提出任何更具体的问题

MongoDB$或参考:


C#find()引用:

您想在中使用$in$或者也可以,但更详细,仅在较新版本(我相信是1.5.4之后)中受支持。

这与$不符,或者包含一系列条件(表达式)而不是值。