我对Mongo DB / Mongoose相当新,并希望确保我能以正确的方式接近Mongoose错误。我试图通过它的搜索来搜索文档。 _ID。这是我的疑问:
const team = await Team.findOne({_id:req.body.invitedTeamID});
这很好但我需要验证是否从这个查询中返回了任何记录,所以在经过一些研究后我将其修改为如此:
const team = await Team.findOne({_id:req.body.invitedTeamID}, function(err, doc){
if(doc.length === 0 || err){
console.log("no record found!")
}
});
当我输入inviteTeamID变量的虚假对象id时,我得到一个丑陋的Mongoose拒绝承诺错误,如下所示:
CastError:对于值#34; 005a99
,强制转换为ObjectId
对于上述任一功能或上述功能都会发生这种情况,而且我没有得到我的console.log语句。
有人可以告诉我们处理这个问题的正确方法吗?
由于
答案 0 :(得分:2)
首先,您可以使用快捷方式Model.findById()
按ObjectId
进行查询。其次,您正在混合async function和callback function。您需要为方法添加三件事:
ObjectId
修改后的方法如下所示:
const mongoose = require('mongoose');
const Team = require('../models/Team');
async function getTeamById(id) {
if (!mongoose.Types.ObjectId.isValid(id)) {
// handle bad id
}
try {
const team = await Team.findById(id);
if (!team) {
// no team with such id, error handling code
}
// team was obtained, rest of the code
} catch (error) {
// handle query error
}
}