2011-08-11 15 views
32

mam poniższego schematu (przeprosiny, że w coffeescript)Jak korzystać Mongoose findOne

Schema = mongoose.Schema 

AuthS = new Schema 
    auth: {type: String, unique: true} 
    nick: String 
    time: Date 
Auth = mongoose.model 'Auth', AuthS 

ja po prostu chce odzyskać jeden rekord, który jest zdecydowanie w mojej bazy danych:

Auth.findOne({nick: 'noname'}, function(obj) { console.log(obj); }); 

Niestety zawsze loguje się null. db.auths.findOne({nick: 'noname'}) w powłoce mongo zawsze zwraca wartość. Co się dzieje?

+14

Nie trzeba przepraszać za bycie w CoffeeScript; po prostu nie oznaczaj go 'javascript'. –

Odpowiedz

63

znaleźć problem, należy użyć function(err,obj) zamiast:

Auth.findOne({nick: 'noname'}, function(err,obj) { console.log(obj); }); 
+1

Kiedy używam 'findOne' w ten sposób, otrzymuję moje dane, ale' obj' nie jest obiektem 'Document'. Kiedy próbuję 'obj.nick' i' obj [nick] 'otrzymuję undefined. Kiedy próbuję 'obj.get ('nick')' otrzymuję obiekt nie ma metody get. Próbowałem wielu konwersji JSON i tworzenia 'doc = new Document (obj)'. Próbowałem również 'doc.toObject (obj)' i 'doc.set (obj)'; –

+2

@ JonathanCzitkovics Myślę, że jeśli zrobisz obj.toObject(), który dałby ci to, czego szukałeś. – Guy

+5

Gdy operacja zostanie pomyślnie zakończona (wartość err ma wartość null), ale nie ma zgodności, dokument również będzie pusty. –

2

Można rozważyć użycie console.log z wbudowanymi "argumentów" obiektu:

console.log(arguments); // would have shown you [0] null, [1] yourResult 

To będzie zawsze wysyłany wszystko twoich argumentów, bez względu na to, ile masz argumentów.