2012-02-16 11 views
10

Próbuję połączyć się z MongoDB przez Node.js i mam problem z metodą count(). Używam node-mongodb-native i wygląda na to, że to, co robię, powinno działać. Mój przykładowy kod:Kolekcja zliczania MongoDB Node.js

var get_total_num_docs = function(db_client, query, cb){ 
    db_client.collection(query['collection'], function(e, coll) { 
    coll.find(query.params, query.options, function (e, cursor) { 
     cursor.count(function (e, count) { 
     console.log(count); 
     return cb(e, count); 
     }); 
    }); 
    }); 
}; 

Jestem pewien, że wszystko, co istnieje (aka coll i kursora są zarówno zdefiniowane), ale działa tylko wtedy, gdy moja dziedzina query.params jest pusty (tj znalezienia rachubę całej kolekcji). Więc jeśli próbuję uruchomić znalezisko przy pomocy dowolnego selektora, znalezisko działa, ale potem nie chce liczyć na zwrócony kursor. Z tego, co przeczytałem online, wygląda to jak właściwy sposób, ale oczywiście coś jest nie tak. Dzięki za wszelką pomoc!

+0

Co masz na myśli mówiąc, że nie chce liczyć? Czy daje ci złą liczbę lub rzuca błąd? –

+0

Jak to dosłownie po prostu nigdy się nie kończy, aka callback przekazany do zliczenia nigdy nie jest wywoływany. Uruchomiłem go na około 10 minut i nigdy się nie kończy. Wywołanie coll.find zajmuje bardzo mało czasu, ale coś po prostu nie działa zliczaniem. – MrJaeger

+0

Czy próbowałeś 'console.log'' za każdym otrzymanym obiektem błędu? A jakie są używane parametry zapytania i opcje? –

Odpowiedz

18

Jeśli nie potrzebują kursor, należy wpisać swój kod tak:

var get_total_num_docs = function(db_client, query, cb){ 
    db_client.collection(query['collection'], function(e, coll) { 
    coll.find(query.params, query.options).count(function (e, count) { 
     console.log(count); 
     return cb(e, count); 
    }); 
    }); 
}; 
Powiązane problemy