【问题标题】:Get records in batches from MongoDB using golang使用golang从MongoDB批量获取记录
【发布时间】:2019-06-04 16:00:05
【问题描述】:

如何使用 golang 从 mongo 数据库中批量获取记录?我知道 mongoDB 本身有一个叫做 cursor.batchSize() 的东西,但我试图找到一个使用 golang 驱动程序的例子。从我所看到的 golang 库 mgo 有一个名为 Batch 的函数,但我试图弄清楚如何使用它。

理想情况下,我正在寻找这样的东西:

const cursor = useDb.collection(mycollection).find().batchSize(10000);
for (let doc = await cursor.next(); doc != null; doc = await cursor.next()) {
    if (doc._id % divisor === 0) {
        counter++;
    }
}

到目前为止,我有这样的事情:

err := c.Find(nil).Batch(1).All(&items)

但它并没有像预期的那样工作。

链接: https://docs.mongodb.com/manual/reference/method/cursor.batchSize/ https://godoc.org/github.com/globalsign/mgo#Query.Batch

【问题讨论】:

    标签: mongodb go batch-processing mgo


    【解决方案1】:

    batchSize() 指定每批响应中要返回的文档数。你仍然会得到所有的结果。例如,如果返回的文档总数为 100,并且您将批量大小指定为 20,则您将有 1 个find 和 4 个getMore 命令从客户端发送到mongod 以完成请求。

    您可以使用一个小技巧进行验证。使用 mongo shell 中的 db.setProfilingLevel(0, 0) 将所有内容记录在日志文件中。执行你的测试应用,你会看到findgetMore记录在日志中。

    【讨论】:

    • 感谢您的解释。我试图弄清楚如何不一次将数百万条记录加载到应用程序中进行批处理。我想我可以做一些有限的事情。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-03-06
    • 2013-02-15
    • 2019-09-18
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多