使用Linq查询的MongoDB C#驱动程序'找不到光标'

时间:2014-01-30 22:08:41

标签: c# linq mongodb mongodb-.net-driver

我正在尝试在Mongo数据库中进行选择 我正在使用这个DLL

MongoDB.Bson,MongoDB.Driver,MongoDB.Driver.Linq

我的桌子有超过55k行

一段时间后出现此错误

  

找不到光标

这是我的代码

var client = new MongoClient(connectionString);        
var server = client.GetServer();        
var database = server.GetDatabase("Database");
var collection = database.GetCollection<DesktopSessions>("desktop_sessions");
var query = (from e in collection.AsQueryable<DesktopSessions>()
            where e.created_at > new DateTime(2012, 7, 1)
            select e);
foreach (var item in query)
{
    string id = item._id.ToString();
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我将代码更改为

 var collection = database.GetCollection<DesktopSessions>("desktop_sessions");
 var queryM = Query.GTE("created_at", new BsonDateTime(new DateTime(2012,7,1)));
 var cursor = collection.Find(queryM);
 cursor.SetFlags(QueryFlags.NoCursorTimeout);

有效!!

答案 1 :(得分:0)

其他选项是设置整个数据库的超时,这就是我正在做的事情。 您可以在配置,命令行,mongo shell甚至C#中执行此操作。

见这里: https://jira.mongodb.org/browse/SERVER-8188

这是我目前在我的init类中使用的解决方案

var db = this.MongoClient.GetDatabase("admin");
var cmd = new BsonDocumentCommand<BsonDocument>(new BsonDocument {
  { "setParameter", 1 },
  { "cursorTimeoutMillis", 3600000 } 
});
db.RunCommand(cmd);

可在此处找到更多信息: https://docs.mongodb.com/v3.0/reference/parameters/#param.cursorTimeoutMillis