2012-03-12 12 views
22

Przechowuję niektóre dane w mongodb i uzyskuję dostęp do niego za pomocą js/nodejs i mangusta. Mogę użyć .find(), aby znaleźć coś w bazie danych, dobrze, to nie jest problem. Problem polega na tym, że jeśli czegoś nie ma, chciałbym zrobić coś innego. Obecnie to właśnie próbuję:Zrób coś, jeśli nic nie znalazłeś z .find() mongoose

UserModel.find({ nick: act.params }, function (err, users) { 
    if (err) { console.log(err) }; 
    users.forEach(function (user) { 
    if (user.nick === null) { 
     console.log('null'); 
    } else if (user.nick === undefined) { 
     console.log('undefined'); 
    } else if (user.nick === '') { 
     console.log('empty'); 
    } else { 
     console.log(user.nick); 
    } 
    }); 
}); 

Żadne z tych pożarów, gdy robię coś, co act.params nie będzie w indeksie nicka. Nie dostaję nic do konsoli w ogóle, kiedy tak się dzieje, ale dostaję user.nick, aby logować się dobrze, gdy już tam jest. Po prostu próbowałem zrobić to w odwrotnym kierunku:

UserModel.find({ nick: act.params }, function (err, users) { 
    if (err) { console.log('noooope') }; 
    users.forEach(function (user) { 
    if (user.nick !== '') { 
     console.log('null'); 
    } else { 
     console.log('nope'); 
    } 
    }); 
}); 

, ale nadal nie rejestrowano nope. Czego tu mi brakuje?

Jeśli go nie znajdzie, to po prostu pominie wszystko w wywoławczym wywołaniu, co jest w porządku, chyba że muszę to zrobić później, jeśli nie jest tam, czego nie chcę robić, jeśli jest. :/

Odpowiedz

63

Gdy nie ma pasujących wyników find() zwraca [], a findOne() zwraca null. Więc albo zastosowanie:

Model.find({...}, function (err, results) { 
    if (err) { ... } 
    if (!results.length) { 
     // do stuff here 
    } 
} 

czyli

Model.findOne({...}, function (err, result) { 
    if (err) { ... } 
    if (!result) { 
     // do stuff here 
    } 
} 
+5

Uczyniłem to za wyjaśnienie różnicy między wartościami 'find()' i 'findOne()' i dostarczaniem odpowiedzi! – Rob

8
UserModel.find({ nick: act.params }, function (err, users) { 
    if (err) { console.log(err) }; 
    if (!users.length) { //do stuff here }; 
    else { 
    users.forEach(function (user) { 
     console.log(user.nick); 
    }); 
    } 
}); 

jest to, co znalazłem do pracy.

+0

to nie działa dla mnie, tylko jeśli (users.length!) –

+1

miejsca musiało zmieniła się od roku 2012. Postaram ten dziś wieczorem, kiedy wrócę do domu, a jeśli to nie zadziała, a users.length to zrobię, edytuję odpowiedź, aby ją uwzględnić. – Rob

5

musiałem użyć:

if(!users.length) { //etc } 

aby zmusić go do pracy.

Powiązane problemy