问题摘要
我想对此有一个自信的实现,因为我真的不知道如何测试。由于此功能实际上仅在一定范围内具有长期使用的意义,但如果没有它,会让我感到不舒服。
我在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'中包含数组的文档。
答案 0 :(得分:1)
您可以在猫鼬中使用.deleteMany()
。
示例:
await Event.deleteMany({id: {$in: finishedEvents}});
或按日期删除:
await Event.deleteMany({date: {$gte: Date.now()}});