【发布时间】:2017-04-26 02:57:27
【问题描述】:
我希望输出类似于:[{downVotes : 2}, {upvotes :3}, {totalReviews : 7}] 总评论是与 $match 匹配的评论。有些用户不投票。
其中一条评论的示例:
{ _id: 584b5d633ac18451ddc4b2c6,
companyName: 'napacabs.com',
shortId: 'B1MrpR_Qe',
updatedAt: Sat Dec 10 2016 16:18:29 GMT-0500 (Eastern Standard Time),
anonId: 584b5d39f371067019df86e9,
myUpdate: Fri Dec 09 2016 20:43:50 GMT-0500 (Eastern Standard Time),
statements: [ [Object], [Object] ],
vote: 'down',
reviewText: 'Another B1MrpR_Qe',
__v: 0,
createdAt: Fri Dec 09 2016 20:41:50 GMT-0500 (Eastern Standard Time),
usefulness: { useful: [], useless: [] },
usefulnessResults: { useful: 0, useless: 0 },
createdString: 'Fr, December 9th 16, 8:41:50 pm',
momented: '20 hours ago',
updatedString: 'Sa, December 10th 16, 4:18:20 pm' }
可能有 7 条评论。投票字段值根据用户投票的方式而变化。
我可以按投票分组,但我不知道如何在不依赖投票值的情况下获得总评论。
我还想对语句字段进行一些其他聚合,例如从对象和聚合中获取值。因此,我需要了解如何返回并执行其他聚合步骤,而不仅仅是将其全部集中到更少的元素。
var sendDataToReviewForPage = function(nameOfCompany){
return Review.aggregate([
{$match : {companyName : nameOfCompany}},
// {$unwind : "$createdString"},
{$group : {_id : "$vote", type : {$push : "$vote"}}},
{$project : {size : { $size : "$type" }}}
]);
};
我知道上面的代码不会产生我想要的结果,但我得到了投票类型的分离,我得到了类似 [ { _id: 'down', size: 1 }, { _id: 'up', size: 1 } ] 的东西,请帮助我获得最终所需的格式。
【问题讨论】:
标签: javascript node.js mongodb mongoose aggregation-framework