Sri*_*ala 2 javascript mongoose mongodb express mongodb-query
我正在尝试更新文档,但错误表明查询已被执行。
MongooseError:查询已执行:footballs.updateOne({ date: 'January 4' }, {})
app.post('/api/bookslot', async (req, res) => {
console.log(req.body);
try {
const token = req.headers['x-access-token'];
const decoded = jwt.verify(token, 'secret123');
const email = decoded.email;
const user = await UserModel.findOne({ email: email });
let sportname = req.body.selectedSport.toLowerCase();
const time = req.body.slotTime;
const seats = req.body.availableSeats - 1;
if (!sportname.endsWith('s')) {
sportname = sportname.concat('s');
}
const NewSlotModel = mongoose.model(sportname, slotSchema);
var update = {};
update[time] = seats - 1;
console.log(update);
const a = await NewSlotModel.updateOne(
{ date: req.body.slotDate },
{ $set: update },
function (err, success) {
if (err) return handleError(err);
}
);
return res.json({ status: 'ok' });
} catch (e) {
console.log(e);
res.json({ status: 'error' });
}
});Run Code Online (Sandbox Code Playgroud)
我哪里出错了?
小智 10
您在代码中同时使用了 async/await 和回调,导致 mongoose 抛出错误。使用它们的实际效果正是您收到的错误类型:
查询已经执行
Mongoose v6 不允许重复查询。
Mongoose 不再允许执行同一查询对象两次。如果这样做,您将收到“查询已执行”错误。执行相同的查询实例两次通常表示混合回调和承诺,但如果您需要执行相同的查询两次,您可以调用 Query#clone() 来克隆查询并重新执行它。参见 gh-7398
要解决此问题,只需从等待中删除第三个参数即可
NewSlotModel.updateOne
进行中:
Run Code Online (Sandbox Code Playgroud)const a = await NewSlotModel.updateOne( { date: req.body.slotDate }, { $set: update } );
| 归档时间: |
|
| 查看次数: |
5659 次 |
| 最近记录: |