我試圖從rmongodb訪問mongodb聚合框架。它應該可以通過mongo.command(),但我不能得到正確的BBS。如何從rmongodb R包訪問MongoDB的聚合框架
這是一個可複製的例子。在R,建立一個測試集合:
mongo <- mongo.create()
db <- "test"
ns <- "test.people"
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "name", "John")
mongo.bson.buffer.append(buf, "age", 22L)
b <- mongo.bson.from.buffer(buf)
mongo.insert(mongo, ns, b);
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "name", "John")
mongo.bson.buffer.append(buf, "age", 35L)
b <- mongo.bson.from.buffer(buf)
mongo.insert(mongo, ns, b);
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "name", "Fred")
mongo.bson.buffer.append(buf, "age", 27L)
b <- mongo.bson.from.buffer(buf)
mongo.insert(mongo, ns, b);
Now, on the mongo console, the following works:
use test
db.runCommand({
aggregate : "people", pipeline : [
{ $group :
{ _id : '$name',
total : { $sum : 1 } } } ]
})
這似乎是R中下面將達到同樣的效果:
mongo.command(mongo, "test", list(
aggregate="people",
pipeline=list(
group=list(
"_id"="$name",
total=list("$sum"=1)
)
)
))
這是行不通的。
對於這個特定的聚合,我知道還有其他方法可以做到這一點。我只是把它作爲一個簡單的例子,但我希望在未來能夠找到更復雜的聚合。
此外,我知道另一個m包的mongodb,我可能會考慮做這個技巧,但我現在非常重視使用這個包。