执行可以处理所有大量文档的原始查询 mongo 驱动程序 c#

Execute raw query that could handle all numerous of documents mongo driver c#

我的情况是收集的过滤条件很长。我更喜欢手动编写它并使用 C# 驱动程序中的 mongoDb RunCommandAsync 方法来获取 Bson 文档作为结果,然后将其反序列化回对象。

正如 doc 所说,它将 return 一个 BsonDocument,而不是一个 Cursor 来迭代。

我从一个集合中做了一个小测试,如下所示,我从 robo 3T 得到了 ~215k 文档,但是当涉及到 c# 中的 RunCommandAsync 时,它默认为 return 101文件。我试图将 batchSize 增加到 200.000,但执行只能 return ~22k 文档(我猜这是每个批处理操作 4MB 的限制)。

var cmdDoc = @"{
'find': 'NotificationHistories',
'filter': {'CreatedTime': {$exists: true}}
'batchSize': 200000,
'singleBatch': true
}";
var cmd = new JsonCommand<BsonDocument>(cmdDoc);
var res = await database.RunCommandAsync(cmd, ReadPreference.PrimaryPreferred, CancellationToken.None);

所以我的最后一个问题是:

有没有我们可以执行原始查询来处理所有大量文档的方法? 结果可以是 Cursor、BsonDocument、Array of BsonDocument 中的任何一个,...

或者没有解决此问题的方法,只能使用 Collection 的正常 FindAggregate 方法?

任何线索都是有用的,因为我觉得写那些特别是 UnwindGroupLookup、...

的东西很长很麻烦

101 条记录是光标的第一个批次中的一些记录,下一条记录的迭代(逐批次)应该通过 getMore 命令完成(但我认为你认为这是错误的方式,我认为没有理由避免常规方式)。