2017-11-30 3 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

좋아요, 호스트 객체를 보여주기 위해 내 게시물을 편집했습니다 –

+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 } ]