2012-10-16 2 views
0

다음은 공식 mongodb 문서 (http://docs.mongodb.org/manual/use-cases/pre-aggregated-reports/#log-an-event) 다음으로 nodejs + mongoose에서 설정을 시도하고 있지만 알아낼 수없는 문제가 있습니다.mongoose pre-aggregated reports

문제는 $의 INC 키에 : 값이, 내가 좋아하는 동적 키를 계산할 수는 이미 파이썬에서 수행 :

var daily_schema = mongoose.Schema({ 
    _id: 'string', 
    metadata: { 
     date: { type: 'date', default: Date.now() }, 
     site: 'string', 
     page: 'string' 
    }, 
    hourly: 'object', 
    minute: 'object'  
}); 

var daily_stats = mdb.model('hits', daily_schema); 

var date = new Date(); 
var day = date.getDate(); 
var hour = date.getHours(); 
var minute = date.getMinutes(); 
var year = date.getFullYear(); 

daily_stats.update({ 
    _id : year + '/' + data.xid + '/' + data.url, 
    metadata : { 
     date : date, 
     site : data.xid, 
     page : data.url 
    } 
    }, 
    { 
    $inc: { 
     'hourly.' + hour : 1, // (python: 'hourly.%d' % (hour,): 1,) how about javascript? 
     'minute.' + hour + '.' + minute : 1 
    } 
    }, 
    { upsert: true }, function(err) { 
     if (err) { console.log("daily_stats:upsert:error"); console.log(err) } else { 
     console.log("daily_stats:upsert:ok"); 
    }   
    } 
); 

나에게 힌트 방법을주십시오 :

update = { '$inc': { 
      'hourly.%d' % (hour,): 1, 
      'minute.%d.%d' % (hour,minute): 1 } 
} 

내 코드처럼 보인다 이 자바 스크립트에서 수행 할 수 있습니다?

감사합니다. 덕분에 &!

답변

1

먼저 $inc 개체를 프로그래밍 방식으로 작성한 다음 update 호출에 포함해야합니다.

var inc = { $inc: {} }; 
inc.$inc['hourly.' + hour] = 1; 
inc.$inc['minute.' + hour + '.' + minute] = 1; 

daily_stats.update({ 
    _id : year + '/' + data.xid + '/' + data.url, 
    metadata : { 
     date : date, 
     site : data.xid, 
     page : data.url 
    }}, 
    inc, 
    { upsert: true }, function(err) { 
     if (err) { console.log("daily_stats:upsert:error"); console.log(err) } else { 
     console.log("daily_stats:upsert:ok"); 
    }   
}); 
+0

대단히 감사합니다. – innowww