我希望输出类似于:[{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 } ]
之类的投票类型的分离请帮助我达到最终所需的格式。
答案 0 :(得分:0)
以下是您的问题的解决方案,其中包含一些虚拟数据。
数据强>
{ “投票”:“向下”, “公司”:“abc”, “评论”:1 } { “投票”:“向下”, “评论”:2, “公司”:“xyz” } { “投票”:“向上”, “评论”:3, “公司”:“xyz” } { “投票”:“向上”, “评论”:5, “公司”:“abc” } { “投票”:“向上”, “评论”:5, “公司”:“abc” } { “投票”:“向上”, “评论”:5, “公司”:“abc” } { “投票”:“向下”, “评论”:5, “公司”:“xyz” }
以下是我的退货预期输出的查询。
db.getCollection('votes').aggregate([
{$match : { "company" : "abc"}},
{
$group :{
_id : "null",
"downVotes" : { $sum : { $cond : [ { $eq : ["$votes" , "down"] }, 1 ,0 ] } },
"upVotes" : { $sum : { $cond : [ { $eq : ["$votes" , "up"] }, 1 ,0 ] } },
"totalReviews":{ $sum : "$review"}
}
}
])
以上查询的输出为:
{
"_id" : "null",
"downVotes" : 1,
"upVotes" : 3,
"totalReviews" : 16
}