我正在使用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驱动程序文档中找到它。
答案 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 }
希望这有助于某人。