2015-03-17 9 views
5

Mam bazę danych użytkowników Mongo, której szukam w Mongoose. Chcę zrobić findOne, aby ustalić, czy użytkownik już istnieje. Chcę, aby najpierw wyszukał, czy użytkownik już istnieje z wiadomością e-mail, a jeśli nie, powinien wyszukać, czy użytkownik istnieje z telefonem. Czy trzeba to zrobić w 2 osobnych zapytaniach, czy można je przekształcić w jeden?Mongoose findOne z zapytaniem "albo" albo "

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! 

}); 

Odpowiedz

17

Dlaczego po prostu nie używać operatora $or?

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. 
}); 

Oto pseudo- SQL równoważne:

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

Czy istnieje sposób, aby priorytety jedną wartość w stosunku do innych? Na przykład najpierw wyszukaj wszystkie adresy e-mail, a następnie wyszukaj telefon, jeśli nie istnieje. –