2012-10-16 311 views
0

按照官方的MongoDB文檔(http://docs.mongodb.org/manual/use-cases/pre-aggregated-reports/#log-an-event)我試圖建立在對的NodeJS相同+貓鼬但我想不通的問題。貓鼬預彙總報表

問題是$ INC鍵:值,我不能計算像動態密鑰其蟒蛇已經完成:

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

我的代碼如下所示:

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"); 
    }   
    } 
); 

請給我一個提示如何這可以在JavaScript中完成?

問候&感謝所有!

回答

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