mgo查询返回大型数据集的“EOF”

时间:2015-03-05 18:12:16

标签: mongodb go mgo

我想执行一个从我的MongoDB服务器返回一些数据的查询,但是当数据量变大时,我得到一个" EOF"来自c.Find()。All()查询的错误。

基本上我有:

activeData := []DataEntry{}
activeDataQuery := bson.M{"data.active": true}
err := sigdb.Find(activeDataQuery).All(&activeData)

对于包含大约50,000个项目的小型测试,它可以正常工作,但是当我尝试我的完整数据集(超过一百万个项目)时,它会返回" EOF",尽管有数据需要查询

可能导致这种情况的原因是什么?我在使用Go 1.3运行Ubuntu 14.04的笔记本电脑上运行Go程序和MongoDB服务器。

编辑:经过进一步的试验,我也得到了:"写tcp 127.0.0.1:27017:断管"来自同一个查询。

1 个答案:

答案 0 :(得分:5)

All方法会将所有匹配的数据加载到内存中,这是处理大型数据集的一种非常糟糕的方法。幸运的是,在方法完成之前你会得到这样的超时,在最坏的情况下,机器会崩溃。

对于任何类型的非平凡数据集,请使用常规迭代,使用IterNext方法。