查找查询为空时,猫鼬会返回什么?
问题描述:
我正在设置一个基于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.");
}
}
});
答
首先,让我们考虑您的条件:
user == [] || user == null || user == undefined || user == {} || user == '[]'
- 的
user == []
将永远是假的。即使[] == []
始终是错误的。 - 如果您正在测试
user == null
那么您不需要user == undefined
,反之亦然,因为null == undefined
总是如此(与null === undefined
不同)。 -
user == {}
将永远是错误的。即使{} == {}
始终是错误的。 -
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) =>{})
你似乎在寻找一个用户,那么使用'findOne'。只要做'if(!user){'。不要矫枉过正。 – Mikey