我正在使用Node.js + Mongoose.js与MongoDB 2.6。我的模型上有一个静态函数,用于计算集合中所有项的值之和。每个项都使用一个projectNo属性分配给一个项目。我需要使静态函数能够为我提供集合的总计,并且如果传递了一个projectNo参数,则添加$match管道运算符进行聚合。这将使我不必编写两个本质上执行相同操作的静态函数。
为了增强功能,我使用了bluebird promisifyAll方法,以使聚合框架返回一个Promise。
以下是计算整个集合的静态函数:
当我尝试将它添加到异步聚合中时,会出现错误,这很合理,因为它只是一个promise。如果我尝试这样做:
db.collection.aggregateAsync([ {$ group:{_id:null,amount:{ $sum:“$ amount” }}} ]).then(function(aggregate){ aggregate.append({$ match:{projectNo:projectNo }}}) })
我会得到一个错误(不定义附加)。我应该怎么做呢?还是要接受我有两个执行相同操作的函数的事实?
为了增强功能,我使用了bluebird promisifyAll方法,以使聚合框架返回一个Promise。
以下是计算整个集合的静态函数:
db.collection.aggregateAsync([
{$group:{_id: null, amount: { $sum: "$amount" }}}
])
以下是仅计算具有匹配projectNo的记录的静态函数:
db.collection.aggregateAsync([
{$match: { projectNo: projectNo }},
{$group:{_id: null, amount: { $sum: "$amount" }}}
])
我真的想使用Aggregate.append方法,只有在req.params.projectNo中包含时才附加$match管道。当我尝试将它添加到异步聚合中时,会出现错误,这很合理,因为它只是一个promise。如果我尝试这样做:
db.collection.aggregateAsync([ {$ group:{_id:null,amount:{ $sum:“$ amount” }}} ]).then(function(aggregate){ aggregate.append({$ match:{projectNo:projectNo }}}) })
我会得到一个错误(不定义附加)。我应该怎么做呢?还是要接受我有两个执行相同操作的函数的事实?