【发布时间】:2020-09-04 19:19:20
【问题描述】:
所以我想删除包含 20 亿条记录的数据集。我在 url 上有一个索引,我想遍历每条记录,看看它是否重复。
索引为 110GB
MongoDB.Driver.MongoCommandException: '命令查找失败:执行程序 find 命令时出错 :: 由 :: Sort 操作使用更多 大于 RAM 的最大 33554432 字节。添加索引,或指定一个 更小的限制..'
由于索引很大,我当前的方法无法运行。
var filter = Builders<Page>.Filter.Empty;
var sort = Builders<Page>.Sort.Ascending("url");
await collection.Find(filter).Sort(sort)
.ForEachAsync(async document =>
{
Console.WriteLine(document.Url);
//_ = await collection.DeleteOneAsync(a => a.Id == document.Id);
}
);
【问题讨论】:
-
如果
{url:1}上已有索引,它应该使用索引而不是内存中的排序。您可以尝试数据库分析以查看实际发送到服务器的查询。 -
你是说它应该使用Url而不是默认ID吗?
-
使用索引进行排序时,32 MB 内存限制不适用。
-
那么我该怎么做才能遍历文档
-
尝试将explain 与所有计划执行选项一起使用,或者可能是数据库分析,看看它为什么不使用
{url:1}索引。
标签: c# mongodb mongodb-.net-driver