出力を次のようにしたいとします。[{downVotes : 2}, {upvotes :3}, {totalReviews : 7}]
合計レビューは$match
と一致しています。一部のユーザーは投票しません。mongoose aggregate:フィールド値の出力数と合計結果
レビューの1の例:
{ _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 } ]
のようなものを持って投票型の分離を得た結果を生成しません知っています。
私はあなたがそれを行う方法を見たが、私のデータは、レビューのフィールドを持っていません。だから私は別の方法があるのだろうかと思っていた。 –
私はちょうど私のデータに追加したレビューフィールドですが、あなたが必要とするカウントフィールドは** totalReviews **です。 –
@jackblankフィールド 'reviewText'の存在によってカウントしたい場合は、この "reviewCount"を実行できます:{"$ sum":{"" $ cond ":[{" $ ifNull ":[" $ reviewText " false]}、1,0}} ' – RaR