我正在尝试使用RMongo从R查询mongo数据库并返回几个嵌套文档的值。
查看RMongo的文档,我理解以下查询:
output <- dbGetQueryForKeys(mongo, 'test_data', '{"foo": "bar"}', '{"foo":1}')
论点在哪里......
db = mongo
collection = 'test_data'
query = '{"foo": "bar"}'
keys = 'Specify a set of keys to return.'
'{"foo":1}'
中的1是什么?这个密钥集的结构是什么?检查this blog post,我发现了一种格式:
结果&lt; - dbGetQueryForKeys(mongo,“items”,“{'publish_date':{'$ gte':'2011-04-01','$ lt':'2011-05-01'}}”,“{'publish_date' :1,'rank':1}“)
所以,显然,键需要值1?
如何获取嵌套文档的密钥?如果我想要像...那样的东西。
output <- dbGetQueryForKeys(mongo, 'test_data', '{"foo": "bar"}', '{"foo1.foo2.foo3.foo4":1,"foo1.foo2.foo3.bar4":1}')
对于嵌套键,我目前正在返回更像...
的内容 X_id
1 50fabd42a29d6013864fb9d7
foo1
1 { "foo2" : { "foo3" : { "foo4" : "090909" , "bar4" : "1"}}}
...其中output[,2]
是一个looooong字符串,而不是像我所期望的那样,与键foo4和bar4(“090909”,“1”)关联的值的两个独立变量。 / p>
答案 0 :(得分:0)
'{“foo”:1}中的1是什么?这个密钥集的结构是什么?
这些键是MongoDB中query projections返回的read operations。值“1”表示包括特定字段,“0”表示排除。默认行为是包括投影中的所有字段。
如何获取嵌套文档的密钥?
对于嵌套键,我目前正在返回更像... 1 {“foo2”:{“foo3”:{“foo4”:“090909”,“bar4”:“1”}}} ...其中output [,2]是一个looooong字符串,而不是两个字符串 与键foo4关联的值的单独变量 和bar4,(“090909”,“1”)正如我所料。
RMongo驱动程序正在返回包含嵌入层次结构的数据。
你可以重塑&amp;使用RMongo dbAggregate()
命令和$project
运算符展平结果输出,该运算符是MongoDB 2.2 +中Aggregation Framework的一部分。
答案 1 :(得分:0)
如果您的最终目标是从嵌套对象中提取R中某些类型的下游处理的值,那么这将使您获得。它避免了必须构建聚合管道,并且是解决问题的简单方法。不要试图直接深入嵌套结构并直接访问bar4,而是提取对象的顶层,它将提供您引用的长字符串。
output <- dbGetQueryForKeys(mongo, 'test_data', '{"foo": "bar"}', '{"foo1.foo2.foo3.foo4":1,"foo1":1}')
由于输出是data.frame,您可以使用'jsonlite'库来获取数据:
library(jsonlite)
foo1 <- fromJSON(output$foo1)
bar4 <- foo1$foo2$foo3$bar4