2012-10-16 148 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