我正在尝试根据创建日期从mongoDB集合中获取数据。
用于获取数据的日期格式: yyyy-mm-dd(例如:2015-04-14)
保存在集合中的格式:时间戳记:“ 2015-04-13T17:50:48.761Z”
控制器 :
$scope.getExpences = function (date) {
SelectedMemberExpence.get( date )
.success(function (result) {
$scope.allExpences = result;
})
}
服务 :
.service('SelectedTimeExpence', function ($http) {
return {
get : function(datetime) {
return $http.get('/api/expences/'+ datetime);
},
delete : function(datetime) {
return $http.delete('/api/expences/'+ datetime);
}
}
})
快递代码:
router
.param('datetime', function (req, res, next) {
req.dbQuery = { timestamp : req.params.datetime };
next();
})
.route('/expences/:datetime')
.get(function (req, res) {
var collection = db.get('memberExpences');
collection.find(req.dbQuery , function (err, data) {
res.json(data);
});
});
我知道,我在“表达”代码功能中做错了。请帮助任何人解决此问题。
timestamp
您集合中的字段的字符串类型类似于ISO日期时间戳字符串。该查询肯定无法工作,因为您将比较两个完全不同的字符串(基于长度,该timestamp
字段包含的字符多于datetime
req参数值)。
如果要在文档架构中包括实际上代表日期的另一个字段,则会容易得多:
db.collection.find().forEach(function (doc){
doc.created_on = ISODate(doc.timestamp);
db.collection.save(doc);
});
然后,您可以使用范围查询来搜索文档,该文档的created_on
字段值大于表示datetime
可变日开始日期的Date对象,而小于表示datetime
可变日结束日期的Date对象。
首先,您需要构造代表日期的开始和结束的Date对象datetime
。例如:
var datetime = "2015-04-14",
start = new Date(datetime),
dateParts = datetime.split('-'),
y = parseInt(dateParts[0], 10),
m = parseInt(dateParts[1], 10),
d = parseInt(dateParts[2], 10),
end = new Date(y, m-1, d+1);
console.log(start.toISOString()); // "2015-04-14T00:00:00.000Z "
console.log(end.toISOString()); // "2015-04-15T00:00:00.000Z"
在您的Express代码中,您可以对其进行修改以反映上述内容:
router
.param('datetime', function (req, res, next) {
var start = new Date(req.params.datetime),
dateParts = datetime.split('-'),
y = parseInt(dateParts[0], 10),
m = parseInt(dateParts[1], 10),
d = parseInt(dateParts[2], 10),
end = new Date(y, m-1, d+1);
req.dbQuery = {"created_on": { $gte: start, $lt: end }};
next();
})
.route('/expences/:datetime')
.get(function (req, res) {
var collection = db.get('memberExpences');
collection.find(req.dbQuery , function (err, data) {
res.json(data);
});
});
请注意使用特殊$
运算符$gte
(大于或等于)和$lt
(小于),它们用于执行范围查询以获取匹配的文档。
使用MomentJS:
var start = moment("2015-04-14").format();
var end = moment(start).add('days', 1);
db.collection.find({"created_on": {"$gte": start, "$lt": end}});
编辑
在节点中,Mongo驱动程序将为您提供ISO字符串,而不是对象,因此,如果您想created_on
在文档中包括其他字段,只需添加具有当前日期值的新字段即可。例如:
.post(function (req, res) {
var date = new Date();
var expence = req.body;
expence["created_on"] = date;
var collection = db.get('memberExpences');
collection.insert(expence, function (err, data) {
res.json(200);
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句