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

Lar*_*ars 0 go mongodb mgo

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

基本上我有:

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

这适用于大约50,000件物品的小型测试,但是当我尝试我的完整数据集(超过一百万件)时,它会返回"EOF",尽管有数据需要查询.

可能是什么导致了这个?我在使用Go 1.3运行Ubuntu 14.04的笔记本电脑上运行Go程序和MongoDB服务器.

编辑:经过进一步的试验,我也得到:"从同一个查询中写入tcp 127.0.0.1:27017:broken pipe".

Gus*_*yer 5

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

在任何类型的非平凡数据集上,使用常规迭代,使用IterNext方法.