2017-11-30 13 views
-1

true/falseの値に基づいて、各フィールド(ssl、maint、seo)の合計のリストを取得しようとしています。私はそれが本当であるかどうかを知る必要があります(彼らはホスティング、またはmaint、またはseo)それぞれのために私の合計カウントを生成する必要があります。True/Falseの値に基づいてMongoose.jsの結果を集計する方法

ホストスキーマ:

var HostSchema = new Schema({ 
    ... 
    pkg: { 
     type: String, 
     required: [ true, 'Hosting Package is required' ] 
    }, 
    ssl: { type: Boolean, required: true }, 
    maint: { type: Boolean, required: true }, 
    seo: { type: Boolean, required: true }, 
    ... 
}); 

ここでは私の現在のコードは、(それは未完成です)です:

// Grab all hosts with yes values for 
Hosts.aggregate(
    [ 
     { $match: { 'ssl': true }}, 
     { $group: { 
       'ssl': '$ssl', 
       'count': {'$sum': 1} 
      } 
     } 
    ], function(err, hosts) { 
    console.log(hosts); 
    console.log(err); 
    if (err) console.log(err); 



    // INCOMPLETE -- Waiting to see the object structure of the above results. 
    var totals; 
    hosts.forEach(function(item, index) { 
     if (item) 
     totals.push({}) 
    }); 

    return res.render('./dashboard/dashboard', { 
     totals: totals, 
     user: req.user}); 
    }); 

}); 

ホストオブジェクト:

{ _id: 5a1f21d5bdaeb730da394900, 
    created_at: 2017-11-29T21:08:37.736Z, 
    updated_at: 2017-11-29T21:08:37.736Z, 
    domain: '1.com', 
    pkg: 'Not Hosted', 
    ssl: false, 
    maint: false, 
    seo: false, 
    __v: 0, 
    cms: [], 
    ftp: [] } 
+0

あなたは一つのオブジェクトを投稿することができますか? –

+0

OK、ホストオブジェクトを表示するために私の投稿を編集しました –

+0

Ohkだから、ssl値がtrueに等しいオブジェクトの総数です。私は正しい? –

答えて

0

私もこれを見つけることができました。これは私がやろうとしていたものです。

ありがとうございます!

Hosts.aggregate(
    [ 
     { $group: { 
       _id: 1, 
       ssl: {$sum: {$cond: [{$eq:['$ssl', true]}, 1, 0]}}, 
       maint: {$sum: {$cond: [{$eq:['$maint', true]}, 1, 0]}}, 
       seo: {$sum: {$cond: [{$eq:['$seo', true]}, 1, 0]}}, 
      } 
     }, 
    ], function(err, hosts) { 

これが返されます:私は私のPCには、いくつかのクエリを実行しようとすることができるので、

[ { _id: 1, ssl: 3, maint: 2, seo: 2 } ] 
関連する問題