繁体   English   中英

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

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

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

正如文档所说,它将返回一个 BsonDocument,而不是一个 Cursor 来迭代。

我从一个集合中做了一个小测试,如下所示,我从 robo 3T 得到了 ~215k 文档,但是当涉及到 c# 中的RunCommandAsync时,它默认返回 101 文档。 我试图将batchSize增加到 200.000,但执行只能返回 ~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、BsonDocument 数组、...

或者除了使用 Collection 的普通FindAggregate方法之外没有其他可能的方法来解决这个问题?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM