2013-04-04 71 views
0

我有一个非常简单的查询,我正在使用官方C#驱动程序1.8针对Mongo运行,它只从执行查询大约50%的时间返回。我有一个单元测试,如果我运行查询,它将在不到一秒的时间内返回大约50%的时间,其他时间将不会完成。MongoDb查询不会返回所有的时间

下面是查询

var q = Database.GetCollection<Stuff>("Stuff").AsQueryable() 
    .Where(x => x.Partition == partitionName && x.PersistantId != null && (
     (x.When.DateStart > startingFrom && x.When.DateEnd == null) || 
     (x.When.DateEnd > startingFrom))); 
return q.ToList(); 

当我把查询和MongoVue使用查询运行它下面我可以进去不到1秒钟的响应。

{ "Partition" : "PartitionID:53", "PersistantId" : { "$ne" : null }, "$or" : [{ "When.DateStart" : { "$gt" : ISODate("2012-04-01T06:00:00Z") }, "When.DateEnd" : null }, { "When.DateEnd" : { "$gt" : ISODate("2012-04-01T06:00:00Z") } }] } 

它似乎也许是1.8驱动程序或MongoDB 2.4.1中的一个错误。这个集合只有大约70,000个项目,位于运行Windows的mongo服务器上,具有4个内存和一个处理器。

是否有任何诊断日志可以查看,或者可能是我的查询错误?

+0

当您查询正在运行(而不是结束)在蒙戈shell提示符下运行db.currentOp() 。这将向您显示所有当前进程/查询,并且您可以看到它是否实际上正在运行。 – 2013-04-05 16:02:43

回答