【发布时间】:2019-01-22 21:12:30
【问题描述】:
我已经定义了一个请求模式:
var RequestSchema = new Schema({
date: {
type: Date,
required: true,
default: Date.now
},
status: {
type: String,
enum: ['Open', 'Closed'],
required: true,
default: 'Open'
}
});
考虑以下文件:
{ status: 'Closed',
date: 2018-08-15T22:43:55.073Z,
_id: 5b61b3b8de9c7252efb77238,
__v: 0 }
{ status: 'Open',
date: 2019-08-15T22:43:55.073Z,
_id: 5b61b3b8de9c7252efb77239,
__v: 0 }
我想要实现的目标很简单,但我似乎无法让它发挥作用。我需要一份包含所有请求年份的列表,例如,如果我们考虑上面显示的文件,我希望得到以下列表:
['2018', '2019']
我是 webdev 世界的新手,所以我能想到的最直接的解决方案如下:
var years = [];
for (var i = 0; i < 100; i++) {
var start = new Date(2018 + i, 1, 1);
var end = new Date(2018 + i, 12, 31);
Request.findOne({ date: { $gte: start, $lt: end } })
.then(function(request) {
if (request) {
years.push(2018 + i);
}
});
}
res.json(years);
很明显,它不会起作用,因为变量 years 不会改变,因为 years.push() 是从回调函数执行的。我以为我可以找到解决方法,但直到现在我都找不到。
任何帮助将不胜感激!
【问题讨论】:
标签: javascript node.js express mongoose callback