Как установить время ожидания как ложное в поисковом запросе, чтобы избавиться от проблемы «идентификатор курсора не найден» Выполнение остановлено »в Mongolite (R) - PullRequest
0 голосов
/ 10 июня 2018

В Монголите (R) появляется проблема «Идентификатор курсора не найден».Но я не знаю, как установить флаг тайм-аута как ложный в поисковом запросе пакета mongolite в R.

1 Ответ

0 голосов
/ 31 августа 2018

Я думаю, что интерфейс не делает все общедоступным, но я разработал некрасивый хак, поскольку внутренняя функция 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 нет мусорауправление курсором, поэтому, если вы действительно не будете осторожны, ваш курсор всегда исчерпан, вы только что допустили утечку памяти.Я полагаю, вам придется перезапустить Монго, чтобы по-настоящему избавиться от курсора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...