douwan2664 2019-01-09 20:09
浏览 597
已采纳

使用golang从MongoDB批量获取记录

How can one fetch records in batches from a mongo database using golang? I know mongoDB itself has something called cursor.batchSize(), but im trying to find an example using a golang driver. From what I've seen the golang library mgo has a function called Batch, but Im trying to figure out how to us it.

Ideally I'm looking for something like this:

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++;
    }
}

I have something like this so far:

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

But it's not working like expected.

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

  • 写回答

1条回答 默认 最新

  • dongren7374 2019-01-10 03:51
    关注

    The batchSize() specifies the number of documents to return in each batch of the response. You will still all results. For example, if the total number of returned docs is 100 and you specify batch size as 20, you will have 1 find and 4 getMore commands sent from the client to the mongod to complete the request.

    One little trick you can use to verify. Use db.setProfilingLevel(0, 0) from mongo shell to log everything in the log file. Execute your test app and you will see find and getMore recorded in the log.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置