2012-03-03 13 views
24

Sono abbastanza confuso con l'uso del metodo select. Questo è come lo uso, ed è sbagliato:Uso errato del metodo .select()

Transaction.find({username : user.username}).select('uniqueId', 'confirmation_link', 'item_name', 'timeout', 'username', function(err, txs){ 
     callback(txs); 
}); 

Quello che sto cercando di realizzare è semplicemente quello di scegliere tra le transazioni nel database di quelli con quel nome utente e voglio prendere solo i campi elencati nel metodo select. Qualcuno può sottolineare come devo usare il metodo select? Grazie.

risposta

45

il docs dicono che si può raggiungere questo obiettivo in questo modo:

v4.0 Mongoose

// Retrieving only certain fields 

Model.find({}, 'first last', function (err, docs) { 

}); 

vecchia API obsolete

// Retrieving only certain fields 

Model.find({}, ['first', 'last'], function (err, docs) { 
    // docs is an array of partially-`init`d documents 
    // defaults are still applied and will be "populated" 
}); 

in modo da poter fare questo senza select() .

+2

Sembra che questo approccio funziona, ma ancora in 'docs' finisco per avere campi come' _id' che io non voglio avere. – Masiar

+1

qualsiasi altro campo oltre a '_id' che non chiedi? in caso contrario, penserei che '_id' sia un'eccezione e quindi sia sempre restituito ... ma questa è solo un'ipotesi – pkyeck

+0

Beh, in realtà tutti i campi richiesti sono tutti i campi tranne il campo' _id'. E io non lo voglio c'è un modo per evitarlo? – Masiar

8

questo è un altro modo: queries in mongoose

Transaction.find({username : user.username}) 
.select('uniqueId confirmation_link item_name timeout username') 
.exec(function(err, txs) { 
     console.log(txs); 
}); 
+0

funziona per me, grazie @lee –

+1

buono uno, si dovrebbe anche aggiungere come escludere i campi –

3

Per recuperare i campi specifici, utilizzare il seguente,

Model.find({/*Your query*/}, {'firstName':1, 'lastname':1, '_id':0}, //Notice, this will omit _id! function (err, docs){}.....

che funziona e non porterà in nessun id extra come _id .

17

Ora c'è un modo più breve di fare questo (se non utilizzano .select e non utilizzando una matrice), solo di passaggio i campi separati da spazi come secondo argomento

User.find({}, 'first last', function (err, usr) { 
    //Got the result, saved a few bytes of code 
}); 

The Docs

5

Per recuperare certo campi senza il recupero della '_id' è possibile specificare per escluderlo

Model.find({}, {'Username':1, '_id':0}, function (err, docs){}..... 
1

selezione & proiezione l'operazione può essere eseguita in questo modo facilmente in nodejs. Prova questo