1

我正在尝试使用 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.'

1 in 是'{"foo":1}'什么?这个密钥集的结构是什么?检查this blog post,我发现了如下格式:

结果 < - dbGetQueryForKeys(mongo, "items", "{'publish_date' : { '$gte' : '2011-04-01', '$lt' : '2011-05-01'}}", "{'发布日期':1,'排名':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"}}}

... whereoutput[,2]是一个 looooong 字符串,而不是像我预期的那样作为与键 foo4 和 bar4 关联的值的两个单独变量 ("090909", "1")。

4

2 回答 2

0

'{"foo":1}' 中的 1 是什么?这个密钥集的结构是什么?

这些键是为MongoDB中的读取操作返回的查询投影。“1”值表示包含特定字段,“0”表示排除。默认行为是在投影中包含所有字段。

如何获取嵌套文档的密钥?

对于嵌套键,我目前返回的内容更像... 1 { "foo2" : { "foo3" : { "foo4" : "090909" , "bar4" : "1"}}} ...where output [,2] 是一个 looooong 字符串,而不是像我预期的那样,作为与键 foo4 和 bar4 关联的值的两个单独变量 ("090909", "1")。

RMongo 驱动程序正在返回包括嵌入层次结构的数据。

您可以使用 RMongodbAggregate()命令和作为MongoDB 2.2+中聚合框架$project的一部分的运算符来重塑和展平结果输出。

于 2013-04-13T15:49:57.387 回答
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
于 2017-03-22T23:05:29.660 回答