2012-05-14 10 views
6

Próbuję wykonać natywne zapytanie MongoDB find za pośrednictwem właściwości collection obiektu Mongoose Model. Nie dostarczam wywołania zwrotnego, więc spodziewam się, że obiekt zwróci obiekt Cursor, ale zamiast tego zwraca undefined. Zgodnie z Mongoose docs, używany sterownik jest dostępny przez YourModel.collection i jeśli przejdę do czysto przy użyciu natywnego kodu sterownika find, zwróci on Cursor, więc nie mogę zrozumieć, co się dzieje.Sterownik natywny znajdujący się w modelu Mongoose nie wraca Kursor

Oto fragment kodu, który reprodukuje problem:

var db = mongoose.connect('localhost', 'test'); 
var userSchema = new Schema({ 
    username: String, 
    emailAddress: String 
}); 
var User = mongoose.model('user', userSchema); 

var cursor = User.collection.find({}); 
// cursor will be set to undefined 

Próbowałem wejść do kodu z węzła inspektor, ale nie jest mi pozwolić. Masz pojęcie, co robię źle?

Odpowiedz

11

Rodzime metody sterownika są skonfigurowane jako proxy do uruchomienia w następnym kroku, więc zwracane wartości ze sterownika nie są zwracane.

Zamiast tego można przekazać wywołanie zwrotne, a drugi zwracany arg jest kursorem.

User.collection.find({}, function (err, cursor) { 
    // 
}); 

Ciekawi mnie, dlaczego trzeba ominąć mangustę?

+1

Ah, cóż, to wyjaśnia. Dzięki, Aaron. Motywacją do tego było tylko kilka eksperymentów podczas testów wydajności. A kiedy to nie zadziałało, jak się spodziewałem, nie mogłem odejść, dopóki nie zrozumiałem, co się dzieje. – JohnnyHK

+0

Dla każdego, kto to znajdzie i nie jest pewien, co z nim zrobić, pomijanie mangusty w ten sposób i użycie natywnego sterownika zwróci kursor, który następnie trzeba przekształcić w tablicę, jeśli chcesz go użyć (np. Res.json (doc) lub co masz) ... User.collection.find ({}, funkcja (err, kursor) { cursor.toArray (funkcja (err, doc) { // robić rzeczy z doc }) ; }); –

Powiązane problemy