C# 如何使用mongoDB批量检索文档?
我有一个使用mongoDB 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"]
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之后)中受支持。这与$不符,或者包含一系列条件(表达式)而不是值。