2012-05-14 6 views
6

Sto tentando di eseguire una query nativa MongoDB find tramite la proprietà collection di un mangusta Model. Non sto fornendo una richiamata, quindi mi aspetto che la ricerca restituisca un oggetto Cursor, ma restituisce invece undefined. Secondo lo Mongoose docs, il driver in uso è accessibile tramite YourModel.collection e se si passa a utilizzare esclusivamente il codice del driver nativo find restituisce un valore Cursor, quindi non riesco a capire cosa sta succedendo.Il driver nativo trova dal modello di Mongoose che non restituisce Cursore

Ecco un frammento di codice che riproduce il problema:

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 

Ho cercato di entrare in codice con il nodo-ispettore, ma non mi sta lasciando. Qualche idea su cosa sto facendo male?

risposta

11

I metodi di driver nativi vengono tutti inviati tramite proxy al prossimoTick in modo che i valori restituiti dal driver non vengano restituiti.

Invece, è possibile passare un callback e il secondo argomento restituito è il cursore.

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

Curioso perché è necessario bypassare mangusta?

+1

Ah, bene, questo lo spiega. Grazie, Aaron. La motivazione per farlo era solo qualche sperimentazione durante il test delle prestazioni. E quando non ha funzionato come mi aspettavo, non riuscivo a lasciar perdere finché non ho capito cosa stava succedendo. – JohnnyHK

+0

Chiunque trovi questo e non è sicuro di cosa farne, bypassando la mangusta in questo modo e utilizzando il driver nativo restituirà un cursore, che sarà quindi necessario trasformare in un array se si desidera utilizzarlo (come res.json (doc) o cosa hai) ... User.collection.find ({}, function (err, cursor) { cursor.toArray (function (err, doc) { // fare cose con doc }) ; }); –

Problemi correlati