2012-02-16 16 views
10

Sto tentando di interfacciarmi con MongoDB tramite Node.js e sto avendo qualche problema con il metodo count(). Sto usando node-mongodb-native e sembra che quello che sto facendo dovrebbe funzionare. Il mio codice di esempio:Raccolta conteggio 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); 
     }); 
    }); 
    }); 
}; 

Sono sicuro che tutto esiste (aka Coll e cursore vengono entrambi definiti), ma funziona solo se il mio campo query.params è vuoto (cioè trovare il conteggio di un'intera collezione). Quindi, se sto cercando di eseguire una ricerca con qualsiasi tipo di selettore, la ricerca funziona, ma poi si rifiuta di contare sul cursore restituito. Da quello che ho letto online questo sembra il modo corretto per farlo, ma ovviamente qualcosa non va. Grazie per qualsiasi aiuto!

+0

Che cosa si intende quando si dice che si rifiuta di contare? Ti sta dando il conteggio sbagliato o genera un errore? –

+0

Come in esso letteralmente non finisce mai, ovvero il callback passato al conteggio non viene mai chiamato. L'ho eseguito per circa 10 minuti e non finisce mai. La chiamata coll.find richiede molto tempo, ma qualcosa non funziona con il conteggio. – MrJaeger

+0

Hai provato '' console.log''ging su ogni oggetto errore che ricevi? E quali sono i parametri di ricerca e le opzioni in uso? –

risposta

18

Se non avete bisogno di un cursore, si dovrebbe scrivere il codice come questo:

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); 
    }); 
    }); 
}; 
Problemi correlati