mongolite - 聚合方法的正确语法
mongolite - correct syntax for aggregate method
数据
这里我使用 mongolite
将虚拟数据插入测试 mongodb 数据库:
library(mongolite)
## create dummy data
df <- data.frame(id = c(1,2,3,4),
region = c("r1", "r1", "r2", "r2"))
> df
id region
1 1 r1
2 2 r1
3 3 r2
4 4 r2
## insert into database
mong <- mongo(collection = "test", db = "test", url = "mongodb://localhost")
mong$insert(df)
问题
如何使用 aggregate
方法查找每个区域的记录数?
MongoShell查询
本题returns正确答案时运行在mongoshell
db.test.aggregate({ $group : { _id : "$region", number_records : { $sum : 1}}})
我现在如何将其翻译成 mongolite
的正确语法?
尝试
我以为
mong$aggregate('{ $group : { _id : "$region", number_records : { $sum : 1}}}')
会这样做,但我收到 Error: invalid JSON object
错误。
我觉得我忽略了一些非常简单的事情!
仔细观察 the documentation (page 4),它表明我实际上需要在每个 key/value 周围加上引号,并在整个查询周围加上方括号:
> mong$aggregate('[{ "$group" :
{ "_id" : "$region",
"number_records" : { "$sum" : 1}
}
}]')
Imported 2 records. Simplifying into dataframe...
_id number_records
1 r2 2
2 r1 2
数据
这里我使用 mongolite
将虚拟数据插入测试 mongodb 数据库:
library(mongolite)
## create dummy data
df <- data.frame(id = c(1,2,3,4),
region = c("r1", "r1", "r2", "r2"))
> df
id region
1 1 r1
2 2 r1
3 3 r2
4 4 r2
## insert into database
mong <- mongo(collection = "test", db = "test", url = "mongodb://localhost")
mong$insert(df)
问题
如何使用 aggregate
方法查找每个区域的记录数?
MongoShell查询
本题returns正确答案时运行在mongoshell
db.test.aggregate({ $group : { _id : "$region", number_records : { $sum : 1}}})
我现在如何将其翻译成 mongolite
的正确语法?
尝试
我以为
mong$aggregate('{ $group : { _id : "$region", number_records : { $sum : 1}}}')
会这样做,但我收到 Error: invalid JSON object
错误。
我觉得我忽略了一些非常简单的事情!
仔细观察 the documentation (page 4),它表明我实际上需要在每个 key/value 周围加上引号,并在整个查询周围加上方括号:
> mong$aggregate('[{ "$group" :
{ "_id" : "$region",
"number_records" : { "$sum" : 1}
}
}]')
Imported 2 records. Simplifying into dataframe...
_id number_records
1 r2 2
2 r1 2