我正在设置一个基于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.");
}
}
});
答案 0 :(得分:6)
首先让我们考虑你的条件:
user == [] || user == null || user == undefined || user == {} || user == '[]'
user == []
始终为假。即使[] == []
总是假的。user == null
,那么您不需要user == undefined
,反之亦然,因为null == undefined
始终为真(与null === undefined
不同)。user == {}
永远都是假的。即使{} == {}
总是假的。user == '[]'
字面上包含字符串user
,则[]
可以为真,但在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
}
});
答案 1 :(得分:1)
建议阅读有关查询link
的文档您应该收到错误,结果为null。
首先, 使用回调函数执行查询时,将查询指定为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) =>{})