2016-05-04 1 views
0

Ich benutze mongodb 2.6 finde mit mehreren Feld, woher weiß ich, welches Feld nicht stimmt? Ist der Benutzername nicht korrekt oder stimmt der Kurs nicht mit den Daten in mongodb 2.6 überein? es nur zurück nullmongodb Suche mit mehreren Feldern, woher weiß ich, welche Felder nicht übereinstimmen?

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" }) 
     } 
    }) 

Antwort

0

Sie könnten eine $or Bedingung in der Abfrage verwenden, da, wie es steht, wird die Abfrage eine implizite UND-Logik daher MongoDB tun, ist für Dokumente aussehen wird, die beiden Bedingungen erfüllen; Wenn einer der Ausdrücke als false auswertet, gibt MongoDB null zurück, so dass Sie auf keinen Fall wissen würden, welches Feld aus einem Null-Ergebnis resultiert oder nicht.

Die $or Betreiber in diesem Fall würden garantieren, zumindest ein Dokument soll eine der Abfrageausdrücke zu false ausgewertet, so können Sie für die Gleichstellung in Ihrem Ergebnis überprüfen, um zu bestimmen, welches Feld nicht richtig ist, obwohl ich es ein bisschen finden kontraintuitiv zu prüfen, welches Feld nicht übereinstimmt.

Betrachten Sie das folgende Beispiel, um diesen Ansatz zu demonstrieren. Es wird angenommen, dass die Felder emails und courseList Felder sind:

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); 
}); 
Verwandte Themen