【问题标题】:Mongodb C# Query Sort exceeded memory limit ofMongodb C# Query Sort 超出了内存限制
【发布时间】:2019-03-26 23:59:00
【问题描述】:

我有 2 周的时间学习和使用 MongoDB,我正在使用 DataGridview 构建一个简单的 WinForm APP。

一切正常,但我添加了超过 1.000.000 个文档,现在它显示了这个错误:

MongoDB.Driver.MongoCommandException: '命令聚合失败:排序超出 104857600 字节的内存限制,但未选择外部排序。中止操作。传递 allowDiskUse:true 以选择加入..'

我已经检查了我所有的周末谷歌如何使用 Aggreate allowDiskUse:true 但它也不起作用。

谢谢。

public void ReadAllDocuments()
{
    List<Clientes> list = collection.AsQueryable().OrderBy(q => q.Nombre).ToList();

    dataGridView1.DataSource = list;
    if (dataGridView1.Rows.Count > 0)
    {
        textBox1.Text = dataGridView1.Rows[0].Cells[0].Value.ToString();
        textBox2.Text = dataGridView1.Rows[0].Cells[1].Value.ToString();
        textBox3.Text = dataGridView1.Rows[0].Cells[2].Value.ToString();
    }
}

【问题讨论】:

  • 您应该限制从 MongoDb 检索的项目数量,请参阅stackoverflow.com/questions/24262020/…
  • 通过调用 ToList() 您强制检索 1m 文档。无论 Mongo 的内存限制如何,您都不会在 DataGridView 中获得它。
  • @RuiJarimba 非常感谢!!是的,我应该限制它!我正在学习,我不知道。我创建了一个 for 循环来过度饱和我的数据库。现在我明白了规则。谢谢你的回答。

标签: c# .net mongodb mongodb-query mongodb-.net-driver


【解决方案1】:

你真的需要把集合的所有文件都拿走吗?

【讨论】:

  • 这不是问题的答案,所以应该作为评论发布
  • 嗨,维琴佐!我并不是真的在学习,只是为了好奇,我创建了一个 for 循环来用 1.000.000 个文档使我的数据库过度饱和,现在我了解了这么多的查询规则,这很有趣。但是答案聚合器选项在我的情况下非常完美!感谢您的关注。
【解决方案2】:

您应该能够将聚合器选项传递给可查询对象。

collection.AsQueryable(new AggregateOptions { AllowDiskUse = true })

但是,通常,使用排序超过文档限制表明您的查询不是最佳的。您可能需要重新考虑您的数据库设计或查询,以便不必对如此庞大的数据集进行排序。

【讨论】:

  • 非常感谢!!它终于奏效了。我知道我真的不会处理这么多文件,只是好奇我创建了一个 for 循环来过度饱和我的数据库,真的到目前为止我还没有处理过这么大的项目。谢谢你的提示我的朋友。我会继续学习。
猜你喜欢
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多