gpt4 book ai didi

r - 如何从 rmongodb R 包访问 MongoDB 的聚合框架

转载 作者:可可西里 更新时间:2023-11-01 09:14:27 26 4
gpt4 key购买 nike

我正在尝试从 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 包,我可能会研究它来实现这个技巧,但我现在投入了大量资金来使用这个包。

最佳答案

首先,下面的代码会给你想要的结果:

sub.buf <- mongo.bson.buffer.create();
mongo.bson.buffer.start.object(sub.buf, "$group");
mongo.bson.buffer.append(sub.buf, "_id", "$name");
mongo.bson.buffer.start.object(sub.buf, "total");
mongo.bson.buffer.append(sub.buf, "$sum", 1L);
mongo.bson.buffer.finish.object(sub.buf);
mongo.bson.buffer.finish.object(sub.buf);
sb <- mongo.bson.from.buffer(sub.buf);

buf <- mongo.bson.buffer.create();
mongo.bson.buffer.append(buf, "aggregate", "people");
mongo.bson.buffer.start.array(buf, "pipeline");
mongo.bson.buffer.append(buf, "0", sb);
mongo.bson.buffer.finish.object(buf);
cmd <- mongo.bson.from.buffer(buf);

我发现在 rmongodb 中执行聚合的挑战在于用户:

  1. 几乎需要使用 bson 缓冲区
  2. 需要将管道参数指定为数组
  3. 必须用整数标记管道数组中的条目 (我相信这需要将实际的聚合机制指定为子 bson 对象)

我对 (3) 的看法可能是错误的,尽管我还没有在任何地方看到任何其他关于如何执行“组”聚合的示例,这会使声明打折扣。

祝你好运!

关于r - 如何从 rmongodb R 包访问 MongoDB 的聚合框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16367408/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com