我正在尝试从 rmongodb 访问 mongodb 聚合框架。它应该可以通过 mongo.command() 获得,但我无法让 bson 正确。
这是一个可复制的例子。在 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)
)
)
))
这不起作用。
对于这个特定的聚合,我知道还有其他方法可以做到这一点。我只是将它作为一个简单的示例提供,但我想在将来进行更复杂的聚合。
另外,我知道另一个用于 mongodb 的 R 包,我可能可以研究它来解决这个问题,但我现在投入了大量资金来使用这个包。