当查询查询为空时,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 == '[]'
-
user == []
将始终为false。 即使[] == []
始终为false。 - 如果你正在testing
user == null
那么你不需要user == undefined
,反之亦然,因为null == undefined
总是为true(不像null === undefined
不是)。 -
user == {}
将永远是错误的。 即使{} == {}
始终为false。 -
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) =>{})