1

我在 Mongolite(R) 中遇到“找不到光标 id 执行停止”的问题。但我不知道如何在 R 中的查找查询 uisng mongolite 包中将超时标志设置为 false。

4

1 回答 1

0

我认为界面并没有公开所有内容,但我开发了一个丑陋的 hack,因为内部函数 mongo_collection_find 确实有一个参数 no_timeout:

mlite <- mongo()
iterate2 <- function (query = "{}", fields = "{\"_id\":0}", sort = "{}",skip = 0, limit = 0, no_timeout=FALSE) {
  check_col()
  cur <- mongo_collection_find(col, query = query, sort = sort, fields = fields, skip = skip, limit = limit, no_timeout=no_timeout)
  mongo_iterator(cur)
}
environment(iterate2) <- environment(mlite$iterate)
results <- iterate2(no_timeout=TRUE)$page()

除了设置 no_timeout 之外,代码与 mlite$iterate 相同

它可以工作,即使它很丑陋(iterate2 是独立的,不再是 mlite 的方法)。

并且要小心,AFAIK 没有针对光标的垃圾控制,所以除非你真的很小心,否则你的光标总是会耗尽,你只是引入了内存泄漏。我想您必须重新启动 mongo 才能真正摆脱光标。

于 2018-08-31T11:26:36.770 回答