Mongodb 如何使用json API在mongo db 2.0.6中编写简单的聚合查询

Mongodb 如何使用json API在mongo db 2.0.6中编写简单的聚合查询,mongodb,aggregation-framework,Mongodb,Aggregation Framework,刚启动mongo,并且已经开始出现查询问题。我有一个名为“externalTransaction”的集合,我想编写一个类似于此mysql查询的集合: select transactionCode, sum(amount) as totalSum, count(amount) as totalCount from externalTransaction where transactioncode in ('aa','bb','cc') group by sum

刚启动mongo,并且已经开始出现查询问题。我有一个名为“externalTransaction”的集合,我想编写一个类似于此mysql查询的集合:

select transactionCode, 
       sum(amount) as totalSum, 
       count(amount) as totalCount 
from externalTransaction 
where transactioncode in ('aa','bb','cc') 
group by sum(amount)
以下是我的尝试:

{
 "collectionName": "externalTransaction",
  sort: {transactionCode:-1},
  query: {this._id: {$in:['aa','bb','cc']}},
  mapReduce:{
   'map': 'function(){

        emit(this.transactionCode, this.amount);

   }',
 'reduce': 'function(key, values){
    var result = {count: 0, sum: 0.0};

    values.forEach(function(value) {
      result.count++
       result.sum += value.amount;
    });
    return result;
 }',
   'out' : 'sumAmount'
 }
}

上面的查询为我提供了一个如下所示的结果集:

_id     value.count        value.sum
ct      2.0                NaN
bb      40.0           NaN
fg      71.0           NaN
fd      36.0           NaN
sd      5.0                NaN
as      4.0            NaN
aa      71.0           NaN
df      4.0                NaN
cc      10.0               NaN

从版本为
2.0.6
的文档中,我还不能使用
聚合框架
,因此如何在mongo中处理像我这样的简单查询。感谢阅读并原谅我的问题的琐碎。

您的
映射
减少
函数中有一些错误。首先,在
map
中,您发出一个简单的数字,在reduce中,您尝试获取一个数字的
amount
。我敢打赌,它没有那种属性。其次,
map
reduce
的输出必须是一致的,因为
reduce
应该可以在部分简化的结果上运行。尝试以下功能:

var map = function() {
  emit(this.transactionCode, {sum: this.amount, count: 1})
}

var reduce = function(k, vals) {
  var result = {sum: 0, count: 0};

  vals.forEach(function(v) {
    result.sum += v.sum;
    result.count += v.count;
  });
  return result;
}

谢谢你的回答。我想根据你的建议,我有些东西能用。但是我想知道为什么过滤器不能用。它仍然在挑选每一笔交易。“我在那里也做错什么了吗?”布莱克老师:是的,看起来很奇怪。它不应该是
query:{transactionCode:{$in:['aa','bb','cc']}
?将其更改为
query:{$in:['aa','bb','cc']}
但仍然拉取所有内容:(您到底是如何运行它的?从何处获得此语法的?请看下面的示例:。尝试使其在mongo shell中工作。