2016-05-04 3 views
0

mongodb 2.6を使用して複数のフィールドを使用して検索していますが、どのフィールドが集計されていないのかを知るにはどうすればよいですか?ユーザー名は集計ではないのですか、コースはmongodb 2.6のデータと一致しませんか?それはちょうどそれが立っているように、クエリが暗黙のAND論理を行っているので、ヌルmongodb複数のフィールドを使用して検索すると、どのフィールドが集計されないのかを知ることができますか?

users.findOne({ 
     "emails.address": username, 
     "courseList.courseId": courseId 
    }, function (queryErr, item) { 
     db.close() 

     if (queryErr) { 
      return res.json({ "error": true, "message": queryErr }) 
     } 

     // If email/courseId not exist 
     if (item === null) { 
      return res.json({ "error": false, "message": "username/courseid is incorrect" }) 
     } 
    }) 

答えて

0

あなたはあなたのクエリに$or条件を使用することができ返すので、MongoDBの両方の条件を満たした文書を探しますです。いずれかの式が をfalseに評価した場合、MongoDBはnullを返します。したがって、nullの結果からどのフィールドが集計されたかどうかを知る方法はありません。

この場合$orオペレータが、私はそれ少し見つけるのにので、あなたは間違っているどのフィールドかを決定するためにあなたの結果に等しいかどうかを確認することができ、クエリ式のいずれかがfalseに評価する必要があり、少なくとも文書を保証しますカウンター直感的で、どのフィールドが集計されていないかをチェックします。

このアプローチを示す次の例を検討してください。 emailsフィールドとcourseListフィールドが配列であると仮定します。

users.findOne(
    { 
     "$or": [ 
      { "emails.address": username }, 
      { "courseList.courseId": courseId } 
     ] 
    }, function (err, item) { 
    var result = { "error": false, "message": "" }; 
    if (err) { 
     result.error = true; 
     result.message = err; 
    } 
    else if (!item) { 
     result.message = "Both username and courseid are incorrect"; 
    } 
    else{ 
     if (item.emails.map(function (e) { return c.address }).indexOf(username) < 0){ 
      result.message = "username is incorrect"; 
     } 
     else if (item.courseList.map(function (c) { return c.courseId }).indexOf(courseId) < 0){ 
      result.message = "courseId is incorrect"; 
     } 
     else{ 
      result.message = item; 
     } 
    } 
    return res.json(result); 
}); 
関連する問題