2015-07-23 5 views
-1

Кто-нибудь знает, как добавить аргумент hint к запросу mongo при использовании пакета rmongodb? Примечание: hint теперь устарел.

В настоящее время я использую запрос mongo.find.all для его простоты, а не для отдельных команд cursor, buffer.

mongo.find.all(mongo = mongo, 
       ns = "ops.weather", 
       query = "{\"where.zip_code\":\"60603\", \"what.currently.time\":{\"$gte\":1430936418}}", 
       sort = mongo.bson.empty(), 
       fields = list(what.currently.time = 1L, 
          what.currently.precipIntensity = 1L, 
          what.currently.temperature = 1L, 
          what.currently.windSpeed = 1L, 
          what.currently.windBearing = 1L, 
          where.zip_code = 1L, 
          where.latitude = 1L, 
          where.longitude = 1L, 
          what.observation_type = 1L), 
       limit = 0L, 
       skip = 0L, 
       options = 0L, 
       data.frame = TRUE) 

В Монго запрос будет выглядеть примерно так, не все поля в полном примере выше:

db.weather.find({"where.zip_code" : "60603","what.currently.time" : {"$gte" : 1430936418}}).hint("where.zip_code_1_what.currently.time_1") 

Намек явно улучшает производительность запросов при использовании в Монго, так что было бы полезно для реализации в текущем процессе R.

Текущий sessionInfo()

> sessionInfo() 
R version 3.2.1 (2015-06-18) 
Platform: i386-w64-mingw32/i386 (32-bit) 
Running under: Windows 7 (build 7601) Service Pack 1 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C       
[5] LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] rmongodb_1.8.0 

loaded via a namespace (and not attached): 
[1] plyr_1.8.3  tools_3.2.1  rstudioapi_0.3.1 Rcpp_0.12.0  jsonlite_0.9.16 

ответ

1

После выполнения bit of research, я обнаружил, что вы можете поставить намек на $ намек аргумент запроса. В MongoDB это будет выглядеть следующим образом:

db.weather.find({$query: {...}, $hint: {"where": 1, ...}}) 

И вы можете сделать то же самое в rmongodb. Изменение вы запрашиваете к чему-то вроде этого:

query = 
    "{\"$query\": 
    {\"where.zip_code\":\"60603\", \"what.currently.time\":{\"$gte\":1430936418}}, 
    \"$hint\": 
     \"where.zip_code_1_what.currently.time_1\"}" 

Я испытал это, и она работала на моем тестовом наборе данных без ошибок. Дайте мне знать, если бы это сработало для вас.

+0

Вы не прокомментировали запятую в конце того, где утверждения '\" what.currently.time \ ": \" $ gte \ ": 1430936418}' должно быть '\" what.currently.time \ ": \ "$ GTE \": 1430936418} '? – geneorama

+0

В любом случае, двое из нас не могли заставить это работать с запятыми, без запятых и с фигурными скобками вокруг части '$ gte', например. '\ "What.currently.time \": {\ "$ GTE \": 1430936418}}'. Я также попытался избежать цитат, а не использовать одинарные кавычки снаружи. – geneorama

+0

Я раньше видел эту помощь, и я согласен, что это похоже на путь. Я пришел к тому же синтаксису, который вы используете, и похоже, что он должен работать. Не уверен, что случилось ... Я добавил 'sessionInfo()' на мой вопрос. Может быть, это ошибка? – geneorama

Смежные вопросы