我正在尝试创建一个包含2个日期的路由,并将这些日期在数据库中彼此交换。
update方法在forEach外部有效,但在内部无效,我如何才能在forEach内部有效?
// @route PATCH api/swap
// @desc replace date
// @access Public
router.put("/swap", (req, res) => {
const firstDate = req.body.firstDate;
const secondDate = req.body.secondDate;
// console.log(firstDate, secondDate);
// Card.updateOne({ date: firstDate }, { $set: { date: secondDate } });
Card.find()
.then(cards => {
cards.forEach(card => {
if (card.date === firstDate) {
return card.updateOne(
{ date: firstDate },
{ $set: { date: secondDate } }
);
} else if (card.date === secondDate) {
return card.updateOne(
{ date: secondDate },
{ $set: { date: firstDate } }
);
} else {
return card;
}
});
})
.then(() => console.log("working"));
});
答案 0 :(得分:1)
对于要实现的目标,您需要使用QueryCursor,它可以使您一个接一个地修改文档。
您可以这样做,
<a class="btn btn-primary ABC-Fill" style="float:right;" role="button">Insert ABC</a>
答案 1 :(得分:0)
您需要确保forEach
中的匿名函数支持promise,可以通过async
关键字来实现。
尝试一下:
cards.forEach(async (card) => {
return card.updateOne(
...
此外,findAndModify()
可能是一项更好的工作工具,因此您可以避免在每个请求上遍历Card
对象的整个集合,并将其卸载到query
参数中数据库调用。