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

8ehkhllq  于 2023-06-22  发布在  Go
关注(0)|答案(3)|浏览(236)

我设置了一个功能,根据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.");
          }
        }
      });
6l7fqoea

6l7fqoea1#

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

user == [] || user == null || user == undefined || user == {} || user == '[]'
  1. user == []将始终为false。即使[] == []也总是假的。
    1.如果你正在测试user == null,那么你不需要user == undefined,反之亦然,因为null == undefined总是为真(不像null === undefined不是)。
  2. user == {}将始终为false。即使{} == {}也总是false。
    1.如果user包含字符串[],则user == '[]'可以为true,但这在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
  }
});
oxalkeyp

oxalkeyp2#

建议阅读查询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) =>{})

y53ybaqx

y53ybaqx3#

对于上面的评论,Mongoose从5.0版本起放弃了对node.js驱动程序回调的支持,您不能使用回调函数,但您可以使用async/await或promises(then)。
检查; MongooseError: Model.findOne() no longer accepts a callback at Function

相关问题