2015-03-17 9 views
5

Ich habe eine Mongo Benutzerdatenbank, die ich mit Mongoose abfrage. Ich möchte mit findOne ermitteln, ob ein Benutzer bereits existiert. Ich möchte zuerst suchen, ob ein Benutzer bereits mit einer E-Mail existiert, und falls nicht, sollte er danach suchen, ob ein Benutzer mit einem Telefon existiert. Muß das in 2 getrennten Abfragen gemacht werden oder kann es in einem zusammengerollt werden?Mongoose findOne mit 'entweder oder' Abfrage

User.findOne({ email: req.body.email }).exec(function(err, user){ 

    if (user) //user already exists with email 
    else //no users with that email but we haven't checked phone number yet! 

}); 

Antwort

17

Warum nicht einfach $or operator verwenden?

User.findOne({$or: [ 
    {email: req.body.email}, 
    {phone: req.body.phone} 
]}).exec(function(err, user){ 
    if (user) {} //user already exists with email AND/OR phone. 
    else {} //no users with that email NOR phone exist. 
}); 

Hier ist der pseudo- SQL äquivalent:

SELECT * FROM users WHERE email = '%1' OR phone = '%2' 
+0

Gibt es eine Möglichkeit einen Wert über eine andere zu priorisieren? Suchen Sie beispielsweise zuerst alle E-Mail-Adressen und suchen Sie dann nach dem Telefon, wenn keines existiert. –

Verwandte Themen