MongoDB TypeError:无法读取属性'结果'未定义的

时间:2018-04-08 09:35:19

标签: node.js mongodb

我想在插入之前将数据插入到集合中,我需要检查它是否存在

  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}
}

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; 
})