【发布时间】:2019-11-16 12:40:14
【问题描述】:
问题总结
我希望对此有信心实现,因为我真的不知道如何测试它。因为这个功能确实只在一定范围内相关,并且适合长期使用,但如果我没有它会让我感到不舒服。
我的 Node.js/Express/Mongoose(MongoDB) REST APi 中有一个模型,它有一个日期索引(不是 Date.now,用户选择的日期)。在此模型的部分路线中,我希望能够根据不同的索引查询模型,但我想删除该查询中日期索引的日期早于当前日期的所有文档(Date.现在)。
我的尝试
我想出了一个解决方案,虽然它创建了一个应该删除的文档的 ID 数组,但我不知道如何通过该 ID 数组删除。
// @route GET api/events/new/:course
// @desc Find upcoming events based on the course
// @access Private
router.get('/new/:course', auth, async (req, res) => {
try {
// Query the events based on the course
const events = await Event.find({course: req.params.course});
let finishedEvents = [];
let validEvents = [];
// Find & Save the IDs of all events that aren't finished
events.foreach(event => {
if (Date.now < event.date) {
validEvents.push(event);
} else {
finishedEvents.push(event.id);
}
});
/** How do I delete 'finishedEvents' without any asynchronously-related issues,
* like i'm not sure mapping through 'finishedEvents' and removing them individually
* would work. Plus mongoose doesn't even have a 'deleteById' query type like it has
* 'findById'. Could I just .deleteOne({ id: arrayElement }) ?
*/
res.json(validEvents);
} catch (err) {
console.error(err.messsage);
res.status(500).send('Server error');
}
});
我应该返回“validEvents”中的事件数组,并删除“finishedEvents”中包含的数组的所有文档。
【问题讨论】:
标签: arrays node.js mongodb express mongoose