【问题标题】:mongoose pre-aggregated reports猫鼬预聚合报告
【发布时间】:2012-10-17 01:13:02
【问题描述】:

按照官方 mongodb 文档 (http://docs.mongodb.org/manual/use-cases/pre-aggregated-reports/#log-an-event),我正在尝试在 nodejs + mongoose 中设置相同的内容,但有一个我无法弄清楚的问题。

问题在于 $inc 键:值,我无法像在 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 中做到这一点?

向所有人致以最诚挚的问候和感谢!

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案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");
        }           
    });
    

    【讨论】:

      猜你喜欢
      • 2015-05-19
      • 2019-08-29
      • 1970-01-01
      • 2018-08-22
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      相关资源
      最近更新 更多