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

时间:2017-07-18 16:44:22

标签: node.js mongodb mongoose

我正在设置一个基于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.");
          }
        }
      });

2 个答案:

答案 0 :(得分:6)

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

user == [] || user == null || user == undefined || user == {} || user == '[]'
  1. user == []始终为假。即使[] == []总是假的。
  2. 如果您正在测试user == null,那么您不需要user == undefined,反之亦然,因为null == undefined始终为真(与null === undefined不同)。
  3. user == {}永远都是假的。即使{} == {}总是假的。
  4. 如果user == '[]'字面上包含字符串user,则
  5. []可以为真,但在Mongo中永远不会发生这种情况
  6. 以下是检查是否有任何发现的方法:

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