gpt4 book ai didi

聚合框架中的 rmongodb $cond

转载 作者:行者123 更新时间:2023-12-01 05:19:24 25 4
gpt4 key购买 nike

我正在尝试通过 rmongodb 中的操作在组中执行求和。我求和的“列”包含 NaN 值,导致我的总和返回 NaN。在通过命令运行组之前,我想使用 $project 用零替换 NaN,但我被卡住了。

这将产生虚拟数据(在 mongo 控制台中):

db.NAtest.insert({ y : 1, x : 1})
db.NAtest.insert({ y : 1, x : 2})
db.NAtest.insert({ y : 2, x : 3})
db.NAtest.insert({ y : 2, x : 4})
db.NAtest.insert({ y : 2, x : NaN})

这将产生所需的结果(在 mongo 控制台中):
db.NAtest.aggregate( { $project : { y : 1, 
x : { $cond : [ { $ne : ['$x', NaN] },
'$x',
0] } } } )

这就是我在 R 中的工作:
library(rmongodb)
mongo <- mongo.create()
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.append(buf, "aggregate", "NAtest");
mongo.bson.buffer.start.array(buf, "pipeline")
mongo.bson.buffer.append.bson(buf,
"0",
mongo.bson.from.list(list('$project' = list(y = 1,
x= 1))))
mongo.bson.buffer.finish.object(buf)
cmd <- mongo.bson.from.buffer(buf)

result <- mongo.command(mongo, "rmdb", cmd)

当我尝试添加 $cond 来转换 NaN 时,使用以下命令:
x = list("$cond" = c(list("$ne" = c("$x", as.numeric(NA))), "$x", "0"))

代替
x = 1

不返回任何结果,mongo.get.err() 返回值 10 表示 BSON 无效。

如果我在包含 $cond 部分的 R session 中运行 print(cmd) ,则会产生以下输出:
> print(cmd)
aggregate : 2 NAtest
pipeline : 4
0 : 3
$project : 3
y : 1 1.000000
x : 3
$cond : 3
$ne : 4
0 : 2 $x
1 : 2 NA

: 2 $x
: 2 0

我不认为问题出在代码的 NaN/as.numeric(NA) 部分,因为当我尝试用零替换数字 2 时,我得到了同样的错误。

提前致谢。

最佳答案

似乎 rmongodb 在聚合时无法真正处理嵌入在其他运算符中的运算符。我在使用 $substr 时遇到了同样的问题在 $group .

在一个阶段只尝试一个操作符。如果不可能,我可以推荐 RMongo 包作为替代。

dbAggregate(
mongo, "db", '{
$project : {
y : 1,
x : {$cond : [{ $ne : ['$x', NaN] }, '$x', 0]}
}
}')

关于聚合框架中的 rmongodb $cond,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17603616/

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