首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mongoDB批量检索文档?

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

Stack Overflow用户
提问于 2011-01-12 02:48:47
回答 2查看 2.6K关注 0票数 2

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

代码语言:javascript
复制
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数组,并一次得到它们,然后在一个循环中进行解析,如果可能的话,使用一个连接。

我如何优化我的查询来做到这一点呢?

谢谢,

--迈克尔

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-12 13:32:12

您想要使用$in。$or也可以工作,但更冗长,只支持更新的版本(我相信是1.5.4之后)。

票数 2
EN

Stack Overflow用户

发布于 2011-01-12 03:19:44

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

代码语言:javascript
复制
query = {
   'primaryKey': {
      '$in': [
         'val1',
         'val2',
         'val3'
      ]
   }
}

当调用.find()时,上面的代码将以游标的形式返回结果列表,而不是现在提交单个primaryKey并调用findOne()。

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

希望这能有所帮助!请随时在评论中提出更具体的问题。

MongoDB $or参考:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or

C# find()引用:http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-FindandFindAsmethods

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4661409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档