我在猫鼬中使用find()
来定位文档。猫鼬在回调上循环两次(首先带null,然后带所需的文档)。
我的猫鼬里只有一个文档。
这是我的代码
model.find({c_id:req.params.c_id},{'_id': 0,'__v':0}).then(function(contract){
console.log(typeof contract); //1, 5
console.log(typeof contract[0]); //2, 6
if(req.session.email == contract[0]['_doc'].initiator){ //throws error because contract is undefined the first time
console.log("Initiator");
res.end();
}
else{
console.log("Access Denied"); //7
res.end();
}
}).catch(function(err){
console.log("No contract found with this id"); //3
console.log(err); //4
});
输出为:
//I have numbered the output lines with their respective code lines
1. object
2. undefined
3. No contract found with this id
4. Cannot read property _doc of undefined
5. object
6. object
7.Access Denied
我知道我可以将其包装在if
语句中,仅在contract
不是undefined
时才运行代码。
我想知道为什么会这样?这是我在做什么吗?还是猫鼬find()
应该会这样?
注意:之所以使用[0]['_doc']
是因为find()
返回了一个游标,我很肯定它们不会在这里引起任何问题。
那是什么导致find()
运行两次?
编辑:我多次运行该代码,并且只随文档一起运行了一次或两次(没有未定义的数据)。相同的代码,有时带来未定义的数据,有时没有。