关于官方的mongodb文档(http://docs.mongodb.org/manual/use-cases/pre-aggregated-reports/#log-an-event)我试图在nodejs + mongoose中设置相同但是有一个我无法弄清楚的问题。
问题在于$ inc key:value,我无法像在python中那样计算动态密钥:
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中完成此操作?
最好的问候&谢谢大家!
答案 0 :(得分: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");
}
});