我在 Mongolite(R) 中遇到“找不到光标 id 执行停止”的问题。但我不知道如何在 R 中的查找查询 uisng mongolite 包中将超时标志设置为 false。
问问题
221 次
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 回答