2017-12-15 8 views
0

임은 다음과 몽구스 스키마몽구스 집계 쿼리 건너 뛰는 게터

var schema = new mongoose.Schema({ 
subtotal: {type: Number, required: true, default: 0}, 
owner: { type : Number, required : true, index: true}, 
products: [{type: mongoose.Schema.ObjectId, ref: 'Product'}], 
}, { 
timestamps: true 
}); 


schema.path('subtotal').set(function(p){ 
    return p * 100; 
}); 

schema.path('subtotal').get(function(p){ 
    return parseFloat((p/100).toFixed(2)); 
}); 

schema.set('toJSON', {getters: true, setters:true}); 
schema.set('toObject', {getters: true, setters:true}); 

(예를 들어, 11.99) 예상대로 합계 값을 간단한 찾기 쿼리를 반환 실행이있다.

집계 쿼리를 실행할 때 소계 값은 100으로 나눌 수 없습니다.

Order.aggregate([ 
    { $match: { $and: [ 
    {status: 'COMPLETE'}, 
    {premises: mongoose.Types.ObjectId(premisesId)}, 
    {createdAt:{ 
     $gte: startOfToday, 
     $lt: endOfToday 
    }} 
    ]}}, 
    { 
    $group: { 
     _id: {hour: {$hour: "$createdAt"}}, 
     count: { $sum: 1 }, 
     sales: { $sum: '$subtotal'} 
    } 
    }, 
    { 
    $sort: { 
     "_id.hour": 1 
    } 
    } 
]).exec(function(err, orders){ 
    //do something 
}) 

예상되는 집계 동작입니까?

집계 쿼리가 강제로 getter를 실행할 수있는 방법이 있습니까?

답변

0

짧은 대답 : 예, 예상되는 동작입니다.

긴 대답은 Model.aggregate에 대한 몽구스의 설명서를 참조 필요 :

이 에게
은 $ 프로젝트 사업자 파이프 라인의 모든 단계에서 문서의 "모양"을 재정의 허용하므로

인수가 모델의 스키마에 캐스팅되지 , 떠날 수 있는 호환되지 않는 형식의 문서

본질적으로 이것은 mongoose가 허용하지 않는 스키마를 사용하여 집계 (getter 포함)를 사용할 때 적용되는 마술을 의미합니다. 해당 변환을 파이프 라인에 포함시켜야합니다.