4
我想通过在rmongodb中的操作在组中执行一笔款项。我正在求和的“列”包含NaN值,导致我的总和返回NaN。我希望使用$ project在运行group by命令之前用零替换NaN,但我卡住了。
这将产生的虚拟数据(蒙戈控制台):
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})
这将产生期望的结果(在蒙戈控制台):
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是无效的。
如果我运行在R会话打印(CMD)时,包括$ COND部分,下面的输出产生:
> 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
我不认为问题在于与南/ as.numeric (NA)代码的一部分,因为当我尝试用零替换数字2时,我得到相同的错误。
在此先感谢。
有这个查询同样的问题:查询<-mongo.bson.from.JSON(” { “$组”: { “_id”: “$创建”, “计数” :{ “$总和”:1}} } ') –