聚合框架中的rmongodb$cond

聚合框架中的rmongodb$cond,rmongodb,Rmongodb,我试图在rmongodb中通过操作在组中执行求和。我正在求和的“列”包含NaN值,导致我的求和返回NaN。在运行GROUPBY命令之前,我想使用$project将NAN替换为零,但我被卡住了 这将生成虚拟数据(在mongo控制台中): 这将产生所需的结果(在mongo控制台中): 这就是我在R工作的内容: library(rmongodb) mongo <- mongo.create() buf <- mongo.bson.buffer.create() mongo.bson.buf

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

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

这将产生所需的结果(在mongo控制台中):

这就是我在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)
而不是

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

如果在包含$cond部分时在R会话中运行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似乎无法真正处理嵌入其他运算符中的运算符。在
$group
中使用
$substr
时,我遇到了同样的问题

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

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

与此查询有相同的问题:查询
x = 1
> 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
dbAggregate(
    mongo, "db", '{
        $project : { 
            y : 1, 
            x : {$cond : [{ $ne : ['$x', NaN] }, '$x', 0]}
        }
}')