当查询查询为空时,mongoose会返回什么结果?

我build立了一个基于id的用户searchfunction,如果没有find用户,它创build一个新的。 我还没有用户,所以查询永远不会返回一个用户。 但是,我无法成功检查这种情况。 查询查询为空时返回什么?

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

首先让我们考虑你的条件:

 user == [] || user == null || user == undefined || user == {} || user == '[]' 
  1. user == []将始终为false。 即使[] == []始终为false。
  2. 如果你正在testinguser == null那么你不需要user == undefined ,反之亦然,因为null == undefined总是为true(不像null === undefined不是)。
  3. user == {}将永远是错误的。 即使{} == {}始终为false。
  4. user == '[]'可以是真实的,如果user字面上包含string[]但这绝不会发生在Mongo中

这里是如何检查是否有任何发现:

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

推荐阅读文档查询链接

你应该得到错误的结果为null。

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

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

这是我如何完成这个相同的function。 注意我正在使用身体分析器。

 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) =>{})