rmongodb 没有为键返回不同的值
Posted
技术标签:
【中文标题】rmongodb 没有为键返回不同的值【英文标题】:rmongodb not returning distinct values for keys 【发布时间】:2016-07-13 11:59:51 【问题描述】:我正在使用 R 访问一个 MongoDb 表,其中包含来自 Google Directions API 的记录。虽然我能够访问 _id
值,但在尝试访问数据库 data
中的不同键时收到错误消息 - 这是一个包含有关路由的所有信息的数组。知道如何使用rmongodb
查询数组吗?
在下面的代码中,首先我检查集合中有多少条记录。然后使用mongo.distinct()
在数据库中查询所有对象ID,然后在尝试访问下一个索引- 数据时遇到问题。知道为什么会这样吗?我已经包含了一个图像,其中包含来自 MongoDB 罗盘的两个索引的信息。
> 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")
【问题讨论】:
您使用的是哪个 mongodb 库? (我猜是rmongodb
?)
数据库中是否存在images.thumbnail.url
字段?里面有数据吗?
你能提供一个样本文件吗?另外,您使用的是哪个特定版本的 MongoDB?
我使用的是rmongodb
,版本是1.8.0。我对问题进行了一些编辑,以更好地解释问题。在 MongdoDB Compass 中查看数据库时,我可以看到我试图访问的索引是一个数组。如何在mongodb中从R中查询一个数组?
【参考方案1】:
您应该能够完全按照您的尝试进行查询。
在没有您的数据的情况下,这是一个工作示例
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
是一个数组
所以你的查询应该可以工作
## 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"
我们可以插入更多数据并运行相同的查询
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"
【讨论】:
以上是关于rmongodb 没有为键返回不同的值的主要内容,如果未能解决你的问题,请参考以下文章