如何使用Node驱动程序将日期时间保存为BSON Date?

时间:2013-06-14 22:17:57

标签: node.js mongodb mlab

我正在使用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日期,但不在Node驱动程序中创建BSON日期,我也无法在Node驱动程序文档中找到它。

1 个答案:

答案 0 :(得分: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 }

希望这有助于某人。