我想在插入之前将数据插入到集合中,我需要检查它是否存在
collection.find({sno: req.body.sno}).toArray((err, result)=> {
if (result.length > 0) {
flag = false;
callback(flag);
}
else {
console.log(result.length);
collection.insertOne({sno: req.body.sno, password: req.body.password}, (err, insertResult)=> {
if (insertResult.result.ok === 1) {
flag = true;
}
callback(flag);
});
}
});
如果sno
不存在,我有
0
/node_modules/mongodb/lib/utils.js:123
process.nextTick(function() { throw err; });
^
TypeError: Cannot read property 'result' of undefined
但是,如果sno
存在或仅collection.insertOne
(删除collection.find
),则可行。
如何解决这个问题?请给我一些帮助。
它似乎是回调函数参数的问题??
collection.find({xx:xx}).toArray((err, result)=> {
collection.insertOne({...}),(err)=>{} //can't use res??
&&
collection.inserOne({...}),(err,res)=>{
console.log(res.result); // {ok:1,n:1}
}
答案 0 :(得分:1)
尝试记录错误,看看你得到了什么。 无论如何,如果您想知道光标的长度,您不必将其转换为数组,请使用cursor.count()。在你的情况下:
collection.find({sno: req.body.sno}).count()
另外,如果您对使用承诺感到满意,我会建议采用这种方法。
collection.find({sno: req.body.sno})
.then(result => {
if (result.count() < 1) throw new Error()
})
.then(() =>{
// insert
flag = true;
})
.catch(err => {
flag = false;
})