2017-03-23 16 views
0

ここで私は満足して合計レコードの数を提供しMongoの内の1つのクエリで複数の条件を持つ複数の合計を見つける

[ 
    { 
     _id: null, 
     is_trip_completed: 20, 
     is_trip_cancelled: 48, 
     is_trip_cancelled_by_user: 84, 
     ..... 
    } 
] 

ようMongoのクエリから結果を取得できますか私の文書

var trip = new Schema({ 
    unique_id: Number, 
    is_trip_completed: Number, 
    is_trip_cancelled: Number, 
    is_trip_cancelled_by_user: Number, 
    is_trip_cancelled_by_provider: Number, 
    created_at: { 
     type: Date, 
     default: Date.now 
    }, 
    updated_at: { 
     type: Date, 
     default: Date.now 
    } 
} 

です異なる条件で?

+0

なぜフィールド 'is_XXX'が数字ですか?それはブール値ではないでしょうか?また、あなたがしようとしていると、文書 –

+0

のサンプルは、はい、それはboolean型が何であるか、私は指定された条件で、上記のように定義応答として配列にしたい追加してください –

+0

のvarクエリ= [ { $グループ:{ _id:ヌル、 は「trip_completed」 :{ $合計:{$指揮:[ {$ EQ:[{ "is_trip_completed":1}、1]}、 1、 0]}}、 "trip_cancelled_by_user":{ $合計:{ $条件:[ {$ eq:[{"is_trip_cancelled_by_user":1}、1]}、 1、 0]}}}}] –

答えて

1
var query = [ 
     { 
      $group:{ 
       _id: null, 
       "is_trip_cancelled": { 
        $sum: { 
         $cond:[ 
          { $and: [ { $eq: [ "$is_trip_cancelled", 1 ] }, { $eq: [ "$is_trip_cancelled_by_provider", 0 ] }, { $eq: [ "$is_trip_cancelled_by_user", 0 ] } ] }, 
          1, 
          0 
         ] 
        } 
       } 
      } 
     } 
    ] 




result: 

[ { _id: null, 
    is_trip_cancelled: 27 } ] 
0

は、ここでは、適用すべき$グループステージである:

$group: 
{ 
    _id: null, 
    "trip_completed": 
     { $sum: { $cond:[ {$eq: ["$is_trip_completed", 1]}, 1, 0] } }, 
    "is_trip_cancelled": 
     { $sum: { $cond:[ {$eq: ["$is_trip_cancelled", 1]}, 1, 0] } }, 
    "trip_cancelled_by_user": 
     { $sum: { $cond:[ {$eq: ["$trip_cancelled_by_user", 1]}, 1, 0] } }, 
    "is_trip_cancelled_by_provider": 
     { $sum: { $cond:[ {$eq: ["$is_trip_cancelled_by_provider", 1]}, 1, 0] } } 
} 

それは{ $cond:[ {$eq: ["$field_name", 1]}, 1, 0] }の合計を計算する持っているいずれか{$eq: ["$field_name", 1]}条件が満たされた場合1、またはその他の場合は0。これにより、指定された条件を満たす文書が数えられます。

関連する問題