2012-03-03 25 views
24

Estoy bastante confundido con el uso del método select. Esta es la forma en que lo uso, y que está mal:Uso mangosta del método .select()

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

Lo que estoy tratando de lograr es simplemente para seleccionar entre las transacciones en la base de datos de los que tienen ese nombre de usuario y quiero sacar sólo los campos listados en el método select. ¿Alguien puede señalar cómo debo usar el método select? Gracias.

Respuesta

45

la docs dicen que se puede lograr esto, así:

v4.0 Mangosta

// Retrieving only certain fields 

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

}); 

antigua API obsoleta

// 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" 
}); 

para que pueda hacer esto sin select() .

+2

Parece que este enfoque está funcionando, pero aún en 'documentos' termino teniendo campos como' _id' que no quiero tener. – Masiar

+1

cualquier otro campo además de '_id' que no solicite? si no, pensaría que '_id' es una excepción y, por lo tanto, siempre se devuelve ... pero esto es solo una suposición – pkyeck

+0

Bueno, en realidad todos los campos son todos los campos, excepto el campo' _id'. Y no lo quiero Hay alguna manera de evitar esto? – Masiar

8

Ésta es otra manera: queries in mongoose

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

me funciona, gracias @lee –

+1

bueno uno, también debería agregar cómo excluir campos –

3

Para recuperar campos específicos solamente, utilice el siguiente,

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

que va a funcionar y no va a aportar ninguna identificación adicional, como _id .

17

Ahora hay una manera más corta de hacer esto (no usar .select y no utilizar una matriz), simplemente pasando los campos separados por espacios como el segundo argumento

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

The Docs

5

Para recuperar cierta campos sin recuperar el '_id' puede especificar para excluirlo

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

selección & proyección la operación se puede hacer de esta manera fácilmente en nodejs. Pruebe esto