如何在查找查询中将超时设置为false以摆脱"未找到游标ID执行暂停" Mongolite(R)中的问题

时间:2018-06-10 17:41:55

标签: r mongolite

我得到"未找到游标ID执行暂停" Mongolite(R)中的问题。但我不知道如何在R的查询uisng mongolite包中将超时标志设置为false。

1 个答案:

答案 0 :(得分:0)

我认为该接口并未公开所有内容,但由于内部函数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才能真正摆脱光标。