2017-07-18 9 views
1

IDに基づいてユーザーを検索する関数を設定しています。ユーザーが見つからなければ、新しいユーザーを作成します。私はまだユーザーがいないので、クエリはユーザーを返すことはありません。しかし、私はこのケースを確認することができません。 findクエリが空の場合、正確には何が返されますか?検索クエリが空の場合、mongooseは何を返しますか?

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

してみてください、そう 'findOne'を使用することができます。そして、単に '' {(!ユーザー)場合を行います。過度にしないでください。 – Mikey

答えて

2

まずはあなたの条件を考えてみましょう:

user == [] || user == null || user == undefined || user == {} || user == '[]' 
  1. user == []は常にfalseとなります。たとえ[] == []でも常に偽です。
  2. user == nullをテストしている場合は、null == undefinedは常に(null === undefinedと異なります)無効であるため、user == undefinedとその逆が必要ありません。
  3. user == {}は常にfalseになります。 {} == {}でも常に偽です。 userは文字通りの文字列[]が含まれている場合
  4. 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.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

は、あなたがnullのような結果とエラーを取得するべきクエリlink

上のドキュメントを読むことをお勧めします。

まず最初に、 コールバック関数を使用してクエリを実行して、あなたはJSON文書としてクエリを指定します。 JSONドキュメントの構文は、MongoDBシェルと同じです。だから、最初に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) =>{})

関連する問題