Estoy intentando seleccionar solo un campo específico con
exports.someValue = function(req, res, next) {
//query with mongoose
var query = dbSchemas.SomeValue.find({}).select('name');
query.exec(function (err, someValue) {
if (err) return next(err);
res.send(someValue);
});
};
Pero en mi respuesta json también recibo el _id, el esquema de mi documento solo tiene dos campos, _id y name
[{"_id":70672,"name":"SOME VALUE 1"},{"_id":71327,"name":"SOME VALUE 2"}]
¿¿¿Por qué???
javascript
node.js
mongodb
mongoose
TlonXP
fuente
fuente
.select
solo es un filtro para elegir el campo después de obtener todo eso, mi recomendación es usar.find({}, 'name -_id')
.find({}, 'name -_id')
parece no funcionar?Hay una forma más corta de hacer esto ahora:
En caso de que desee la mayoría de los
Schema fields
y desee omitir solo algunos, puede prefijar el camponame
con un-
. Por ejemplo,"-name"
en el segundo argumento no se incluirá elname
campo en el documento, mientras que el ejemplo que se da aquí solo tendrá elname
campo en los documentos devueltos.fuente
blogItemModel.find({}, 'title intro_image intro_text publish_date', function(err, blog_items){..
Hay una mejor manera de manejarlo usando el código nativo de MongoDB en Mongoose.
http://docs.mongodb.org/manual/reference/method/db.collection.find/
Nota:
La lista de objetos enumerados aquí no se devolverá / imprimirá.
fuente
Datos DB
Consulta
Salida:
Zona de juegos de muestra de trabajo
enlace
fuente
Excluir
El siguiente código recuperará todos los campos que no sean la contraseña dentro de cada documento:
Salida
Incluir
El siguiente código solo recuperará el campo de correo electrónico dentro de cada documento:
Salida
fuente
La forma precisa de hacer esto es usar el
.project()
método del cursor con el nuevo controladormongodb
ynodejs
.fuente
.project()
funciona solo con agregado. Si desea usarlo con buscar, use el segundo argumento en elfind({},{ name: 1, _id: 0 })
método.Por ejemplo,
0 significa ignorar
1 significa mostrar
fuente