数据如下:
{ “_id” : 1, “item” : “abc1”, qty: 300 }
{ “_id” : 2, “item” : “abc2”, qty: 200 }
{ “_id” : 3, “item” : “xyz1”, qty: 250 }
函数如下:
abd(v){
return v;
}
现在需要用聚合管道计算qty等于200的集合:例如:
{$project:{value:{
$cond: {
if: { $eq: [ db.eval(“abc(‘$qty’)”) , 200 ] }, then: 1, else: 0 }
}
}
}
怎么都无法计算出status的值等于0的条目,现在感觉是abc(’$qty’)传参数的问题,但是又不知道怎么搞,如果abc($qty)会报错,麻烦各位帮忙解决下,btw:我只是举了个例子,并不是用麻烦的函数计算简单地事情,我的abc函数在具体使用过程中会加很多判断,主要就是怎么拿到每个集合的字段值传入abc函数的问题?
谢答,但个人认为不准确,1.mr我觉得不适合实时计算,更贴合后期数据统计需求,2.aggregate必须支持自定义函数,就好像你定义个abc(1,2)一样肯定是计算了,现在的问题是abc(1,2)这个参数我想传个字段进去,比如abc($qty,2)这样….他就不好使了….难道大家没有在aggregate中用字段进行计算的经历么?