mgo 查询 returns "EOF" 用于大型数据集

mgo query returns "EOF" for large datasets

我想查询 returns 来自我的 MongoDB 服务器的一些数据,但是当数据量变大时,我从 [=26] 得到一个 "EOF" 错误=]().All()查询.

基本上我有:

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

这对于包含大约 50,000 个项目的小型测试来说效果很好,但是当我尝试超过一百万个项目的完整数据集时,它 returns "EOF",尽管那里有数据待查询。

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

编辑:经过进一步试验,我还得到:"write tcp 127.0.0.1:27017: broken pipe" 来自同一个查询。

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

在任何类型的非平凡数据集上,使用 Iter and Next 方法代替普通迭代。