RMongo dbGetQueryForKeys(),“键”的结构是什么,以及如何对它们进行子键处理?

时间:2013-01-23 18:30:05

标签: mongodb rmongo

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

2 个答案:

答案 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