我设置了一个功能,根据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.");
}
}
});
3条答案
按热度按时间6l7fqoea1#
首先,让我们考虑一下你的条件:
user == []
将始终为false。即使[] == []
也总是假的。1.如果你正在测试
user == null
,那么你不需要user == undefined
,反之亦然,因为null == undefined
总是为真(不像null === undefined
不是)。user == {}
将始终为false。即使{} == {}
也总是false。1.如果
user
包含字符串[]
,则user == '[]'
可以为true,但这在Mongo中永远不会发生以下是如何检查是否找到任何内容:
对于
User.find
:对于
User.findOne
:对于
User.findById
:oxalkeyp2#
建议阅读查询link的文档
你应该得到错误的结果为空。
首先,当使用回调函数执行查询时,您将查询指定为JSON文档。JSON文档的语法与MongoDB shell相同。所以我建议你先在Mongod中运行你的查询。
这就是我如何实现这个功能。注意我使用的是Body-parser。
用你的代码
User.findOne({_id:id} >>>
或者你可以保持不变,但试试User.findById(id, (error, user) =>{})
y53ybaqx3#
对于上面的评论,Mongoose从5.0版本起放弃了对node.js驱动程序回调的支持,您不能使用回调函数,但您可以使用async/await或promises(then)。
检查; MongooseError: Model.findOne() no longer accepts a callback at Function