创build一个新的文档,使用聚合来汇总具有特定值的字段

我有一个聚合pipe道下面。 我想做一个看起来像这样的文档{upvotes : 20, downvotes : 30} 。 我想要一个方法来检查vote字段,如果值是up将其添加到upvotes字段和相同的downdownvotes字段。 我如何制作该文件?

  { _id: 57aea6791016c0b023a71e9d, review: { _id: 57aeb0ee1015118c2b19c8b9, updatedAt: Fri Aug 12 2016 22:33:17 GMT-0700 (Pacific Daylight Time), createdAt: Fri Aug 12 2016 22:32:30 GMT-0700 (Pacific Daylight Time), vote: 'up', reviewText: 'test pleas', company: 57aea6791016c0b023a71e9d, companyName: 'comp1', userType: 'anon', user: 57aeb0dd1015118c2b19c8b8, statements: [Object], __v: 0, className: '', momented: 'a minute ago' } }, { _id: 57aea6791016c0b023a71e9d, review: { _id: 57aeb11d3a6bd2cc24b080ad, updatedAt: Fri Aug 12 2016 22:33:17 GMT-0700 (Pacific Daylight Time), createdAt: Fri Aug 12 2016 22:33:17 GMT-0700 (Pacific Daylight Time), vote: 'down', reviewText: 'This will hopefully be good', company: 57aea6791016c0b023a71e9d, companyName: 'comp1', userType: 'anon', user: 57aeb1033a6bd2cc24b080ac, statements: [Object], __v: 0, className: 'thisUser', momented: 'a few seconds ago' } } ] 

到目前为止聚合

 Comps.aggregate([ {"$unwind" : "$reviews"}, { "$lookup":{ "from" : "reviews", "localField" : "reviews", "foreignField" : "_id", "as" : "review" } }, { "$unwind": "$review" }, {$project : { review:1 }} 

一个可能的解决scheme是使用$ cond操作符将“up”/“down”映射到1/0,以便在$ group阶段中进行求和。 我认为追加类似下面的东西到当前的聚合pipe道应该工作:

 $group: { _id: "$_id", upvotes: {$sum: {$cond: [{$eq: ["up", "$review.vote"]}, 1, 0]}}, downvotes: {$sum: {$cond: [{$eq: ["down", "$review.vote"]}, 1, 0]}} } 

这是$ condexpression式运算符的文档。