Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么MongoCursor不返回MongoCollection的所有结果?_C#_.net_Mongodb - Fatal编程技术网

C# 为什么MongoCursor不返回MongoCollection的所有结果?

C# 为什么MongoCursor不返回MongoCollection的所有结果?,c#,.net,mongodb,C#,.net,Mongodb,我正在使用MongoDB.org上的10gen c#MongoDB驱动程序,试图从一个有200多万行的集合中获取所有行。代码如下: var mongoServer = dataHelper.GetMongoServer(); var mongoDatabase = mongoServer.GetDatabase("MyDB"); var mongoCollection = mongoDatabase.GetCollection<MyClass>("MyClass"); var mon

我正在使用MongoDB.org上的10gen c#MongoDB驱动程序,试图从一个有200多万行的集合中获取所有行。代码如下:

var mongoServer = dataHelper.GetMongoServer();
var mongoDatabase = mongoServer.GetDatabase("MyDB");
var mongoCollection = mongoDatabase.GetCollection<MyClass>("MyClass");
var mongoCount = mongoCollection.Count();
var mongoCursor = mongoCollection.FindAll();
mongoCursor.SetBatchSize(1000);
var totalCount = 0;

foreach(var myClass in mongoCursor)
{
    ++totalCount;
    //process record
}
var mongoServer=dataHelper.GetMongoServer();
var mongoDatabase=mongoServer.GetDatabase(“MyDB”);
var mongoCollection=mongoDatabase.GetCollection(“MyClass”);
var mongoCount=mongoCollection.Count();
var mongoCursor=mongoCollection.FindAll();
mongoCursor.SetBatchSize(1000);
var totalCount=0;
foreach(mongoCursor中的var myClass)
{
++总数;
//过程记录
}

当foreach语句完成时,totalCount仅占集合中mongoCount的91%左右。我的代码有问题吗?

1 Mb您的问题是因为更改了批处理大小?因为默认批量大小实际上是4mb。尝试不设置批量大小

2您是否尝试直接将限额设置为300万

3您是否也尝试过获取部分数据,例如50万,因为mongodb或驱动程序有超时

4关于mongo db


希望对您有所帮助。

1 Mb您的问题是因为更改了批量大小?因为默认批量大小实际上是4mb。尝试不设置批量大小

2您是否尝试直接将限额设置为300万

3您是否也尝试过获取部分数据,例如50万,因为mongodb或驱动程序有超时

4关于mongo db


希望这有帮助。

我相信在这种情况下,计数实际上不是Linq方法,因为计数是瞬时的。如果它实际上是反序列化所有记录,则需要更长的时间。从mongoCollection.Count()得到的结果与从MongoShell执行计数查询时的结果相同。我也尝试过设置批大小,得到了相同的结果。是的,关于计数你是对的,我只是没有准确地读取你的代码。你知道mongo是否会锁定写入记录,阻止光标检索它们吗?我相信在这种情况下计数实际上不是Linq方法,因为计数是瞬时的。如果它实际上是反序列化所有记录,则需要更长的时间。从mongoCollection.Count()得到的结果与从MongoShell执行计数查询时的结果相同。我也尝试过设置批大小,得到了相同的结果。是的,关于计数,你是对的,我只是没有准确地读取你的代码。你知道mongo是否会锁定写入的记录,阻止光标检索它们吗?