查找查询为空时,猫鼬会返回什么?

问题描述:

我正在设置一个基于ID来搜索用户的功能,如果找不到用户,它会创建一个新用户。我还没有用户,所以查询永远不会返回用户。但是,我无法成功检查这种情况。当find查询为空时返回什么?查找查询为空时,猫鼬会返回什么?

User.find(id,(error,user)=>{ 
     if(error){ 
      console.log(error); 
     }else{ 
      if(user == [] || user == null || user == undefined || user == {} || user == '[]'){ 
      User.addUser({"fbID":id,"lastMessage":"[]"},(error,response)=>{ 
       if(error){ 
       console.log(error); 
       }else{ 
       console.log(response); 
       } 
      }); 
      }else{ 
      console.log("User exists."); 
      } 
     } 
     }); 
+2

你似乎在寻找一个用户,那么使用'findOne'。只要做'if(!user){'。不要矫枉过正。 – Mikey

首先,让我们考虑您的条件:

user == [] || user == null || user == undefined || user == {} || user == '[]' 
  1. user == []将永远是假的。即使[] == []始终是错误的。
  2. 如果您正在测试user == null那么您不需要user == undefined,反之亦然,因为null == undefined总是如此(与null === undefined不同)。
  3. user == {}将永远是错误的。即使{} == {}始终是错误的。
  4. user == '[]'可以是真实的,如果user字面上包含字符串[],但这绝不会在蒙戈发生

这里是如何检查是否有什么发现或没有:

对于User.find

User.find({}, (err, users) => { 
    // users is an array which may be empty for no results 
    if (err) { 
    // handle error 
    return; 
    } 
    if (users.length) { 
    // there are user(s) 
    } else { 
    // there are no users 
    } 
}); 

对于User.findOne

User.findOne({}, (err, user) => { 
    // user is a single document which may be null for no results 
    if (err) { 
    // handle error 
    return; 
    } 
    if (user) { 
    // there is user 
    } else { 
    // there is no user 
    } 
}); 

对于User.findById

User.findById(id, (err, user) => { 
    // user is a single document which may be null for no results 
    if (err) { 
    // handle error 
    return; 
    } 
    if (user) { 
    // there is user 
    } else { 
    // there is no user 
    } 
}); 

推荐上查询link

你应该结果无效越来越错误阅读文档。

首先, 执行带有回调函数的查询时,可以将查询指定为JSON文档。 JSON文档的语法与MongoDB shell相同。所以我建议先在Mongod中运行你的查询。

User.find({_id: id}, (error, results) =>{}) 

这是我如何完成这个相同的功能。注意我正在使用Body-parser。

Login_or_Create: (req,res) => { 
    User.findOne({name:req.body.name}, (err, user) => { # 
     if(user == null){ 
      let newUser = new User(req.body); 
      newUser.save((err, savedUser) => { 
       if(err){ 
        console.log(err); 
        return res.sendStatus(500); 
       }else{ 
        req.session.user = savedUser; 
        return res.json(savedUser); 
       } 
      }) 
     }else{ 
      req.session.user = user; 
      return res.json(user) 
     } 
    }) 
}, 

与您的代码User.findOne({_id:id} >>>或者你可以把它一样的,但是试着User.findById(id, (error, user) =>{})