栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

golang mongo-go-driver find() 默认读取101条记录的解决办法

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang mongo-go-driver find() 默认读取101条记录的解决办法

想直接看答案的可以看我在论坛的提问和回答(https://bbs.csdn.net/topics/399169646)。

下面是一些过程,最后还有一个疑问,请各位帮忙解答。

最近需要使用 golang 操作 mongodb,看到github 上面有两个驱动包:

github.com/mongodb/mongo-go-driver

gopkg.in/mgo.v2 

最后选择了mongo-go-driver,目前是2021年4月27日,最近的一次更新是8小时前。而 gopkg.in/mgo.v2 已经2年没更新了,不敢试。

然后在使用的时候就发现,使用 find 函数读取数据时,只能读取101条文档。像下面这样:

cursor, err := video_collection.Find(context.Background(), filter)

然后百度了一下,发现可以用 SetBatchSize 设置默认文档读取大小,像下面这样:

max_record := int32(40000)
cursor, err := video_collection.Find(context.Background(), filter, options.Find().SetBatchSize(max_record))

由于我现在记录有3万多条,所以BatchSize设置成4万。程序可以正常运行,但是仍然不方便。以后如果记录超过4万条,就又要重新编译。

百度了半天也没有找到解决办法,去论坛提问,只有一个人回复,最后也是我自己解决了。

通过仔细查看 https://github.com/mongodb/mongo-go-driver/blob/master/mongo/options/findoptions.go 发现:

// The maximum number of documents to return. The default value is 0, which means that all documents matching the
// filter will be returned. A negative limit specifies that the resulting documents should be returned in a single
// batch. The default value is 0.
Limit *int64
 

 

// SetLimit sets the value for the Limit field.
func (f *FindOptions) SetLimit(i int64) *FindOptions {
	f.Limit = &i
	return f
}

可以通过 SetLimit 设置 Limit 的值 ,默认是0,返回所有符合筛选条件的文档。于是我改成这样:

cursor, err := video_collection.Find(context.Background(), filter, options.Find().SetLimit(0))

测试运行正常无问题。

就有一点没有想通,源文件findoptions.go注释里写的Limit默认值为0,返回所有符合筛选条件的文档。 理论上我没有设置时候就应该返回所有文档,为什么返回的是101条呢?

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/945545.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号