1

私は集計パイプラインの下にあります。私はこのような書類を作りたいと思っています{upvotes : 20, downvotes : 30}voteフィールドをチェックし、値がupの場合はupvotesフィールドに追加し、downフィールドの場合はdownvotesフィールドに追加します。どのように私はその文書を作るのですか?集計を使用して特定の値を持つフィールドを合計する新しい文書を作成する

{ _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 
    }} 

答えて

1

一つの可能​​な解決策は、それが簡単に$グループにまとめるために作るために1/0に/「ダウン」「アップ」マッピングするために$指揮演算子を使用することですステージ。私はあなたの現在の集約パイプラインに次のようなものを追加することは動作するはずだと思う。ここで

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

$cond expression operatorのドキュメントです。

+1

動作しているようです。感謝します。 –

関連する問題