1

我正在使用 Node MongoDB 驱动程序为我的网站收集分析数据并将它们发送到 MongoLab。如何将当前日期时间插入到文档中,以便以后可以在 Mongo 中进行聚合?

为了清楚起见,这里是代码:

var query = {};
query['date_time'] = new Date();
Db.connect(mongoUri, function (err, db) {
        if (!err) {
            db.collection(analyticsCollection, function (err, coll) {
                if (!err) {
                    coll.save(query, {safe:true}, function (err, result) {
                        db.close();
                        res.send(200,result);
                        //console.log(result);
                    });
                } else {
                    res.json(503,{errno:503,msg:'error: collection does not exist.'});
                }
            });
        } else {
            res.json(503,{errno:503,msg:'error: database does not exist.'});
        }
    });

MongoDB 文档描述了如何在 mongo shell 中创建 BSON 日期,但不是在节点驱动程序中,我也无法在节点驱动程序文档中找到它。

4

1 回答 1

0

我找到了一种方法来做我想做的事。这对我来说似乎有点笨拙,所以如果有人能找到更好的方法,请告诉我。我的解决方案使用 underscore.js 库:

var _ = require('underscore');
vary query = {}
query['foo'] = 'bar'

Db.connect(mongoUri, function (err, db) {
        if (!err) {
            db.collection(analyticsCollection, function (err, coll) {
                if (!err) {
                    coll.save(_.extend(query,{"datetime":new Date()}), {safe:true}, function (err, result) {
                        db.close();
                        res.send(200,result);
                        //console.log(result);
                    });
                } else {
                    res.json(503,{errno:503,msg:'error: collection does not exist.'});
                }
            });
        } else {
            res.json(503,{errno:503,msg:'error: database does not exist.'});
        }
    });

现在我可以进行聚合(无需使用 $project 运算符):

> db.analytics.aggregate([{$group:{_id:{day:{$dayOfMonth:"$datetime"}}}}])
{ "result" : [ { "_id" : { "day" : 15 } } ], "ok" : 1 }

希望这可以帮助某人。

于 2013-06-15T17:57:16.677 回答