2016-07-13 114 views
1

我正在使用R訪問包含來自Google Directions API的記錄的MongoDb表。雖然我能夠訪問_id值,但在嘗試訪問數據庫data中的不同密鑰時收到錯誤 - 這是一個包含有關路由的所有信息的數組。任何想法如何使用rmongodb來查詢數組?rmongodb不返回密鑰的不同值

在下面的代碼中,首先檢查集合中有多少條記錄。然後使用mongo.distinct()我查詢數據庫中的所有對象ID,然後在嘗試訪問下一個索引 - 數據時遇到問題。任何想法爲什麼發生這種情況?我已經包含了一個圖像,其中包含來自MongoDB指南針的兩個索引的信息。

enter image description here

> if(mongo.is.connected(mongo) == TRUE) { 
+ help("mongo.count") 
+ mongo.count(mongo, coll) 
+ } 
[1] 106500 



> res <- mongo.distinct(mongo, coll, "_id") 
> head(res) 
$`0` 
{ $oid : "57583d1057aa3d0499a85aab" } 

$`1` 
{ $oid : "57583d1157aa3d0499a85aad" } 

$`2` 
{ $oid : "57583d1257aa3d0499a85aaf" } 

$`3` 
{ $oid : "57583d1357aa3d0499a85ab1" } 

$`4` 
{ $oid : "57583d1457aa3d0499a85ab3" } 

$`5` 
{ $oid : "57583d1557aa3d0499a85ab5" } 



> res <- mongo.distinct(mongo, coll, "data.legs") 
Warning message: 
In mongo.distinct(mongo, coll, "data.legs") 
+0

您正在使用哪個mongodb庫? (我猜'rmongodb'?) – SymbolixAU

+0

'images.thumbnail.url'字段是否存在於數據庫中?它有數據嗎? – SymbolixAU

+0

您能否提供樣本文件?另外,你使用的是什麼特定版本的MongoDB? – Stennie

回答

0

你應該能夠準確地查詢它,你正在嘗試。

在沒有數據的,這裏的工作示例

library(rmongodb) 

mongo <- mongo.create(db = "test") 

## create some data 
lst <- list(lat = -37.9, 
      lon = 144.5, 
      image_url = letters) 

## insert data 
mongo.insert(mongo, "test.array_test", mongo.bson.from.list(lst)) 

在MongoDB的客戶端(我使用Robomongo),我們可以看到數據,那image_url是一個數組

enter image description here

所以,你的查詢應該工作

## query data on the 'image_url' array 
mongo.distinct(mongo, "test.array_test", key = "image_url") 
# [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" 

w^e可以插入更多的數據並運行相同的查詢

lst <- list(lat = -37.8, 
      lon = 144.4, 
      image_url = c("string1","string2")) 

mongo.insert(mongo, "test.array_test", mongo.bson.from.list(lst)) 

mongo.distinct(mongo, "test.array_test", key = "image_url") 
# [1] "a"  "b"  "c"  "d"  "e"  "f"  "g"  "h"  "i"  "j"  "k"  "l"  
# [13] "m"  "n"  "o"  "p"  "q"  "r"  "s"  "t"  "u"  "v"  "w"  "x"  
# [25] "y"  "z"  "string1" "string2"