Estoy tratando de seleccionar sólo 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 estoy recibiendo también el _id, mi esquema del documento sólo tiene dos campos, _id y nombre

[{"_id":70672,"name":"SOME VALUE 1"},{"_id":71327,"name":"SOME VALUE 2"}]

Por qué???

InformationsquelleAutor TlonXP | 2014-06-22

5 Comentarios

  1. 140

    La _id campo siempre está presente a menos que explícitamente excluye. Hacerlo utilizando la - sintaxis:

    exports.someValue = function(req, res, next) {
        //query with mongoose
        var query = dbSchemas.SomeValue.find({}).select('name -_id');
    
        query.exec(function (err, someValue) {
            if (err) return next(err);
            res.send(someValue);
        });
    };

    O explícitamente a través de un objeto:

    exports.someValue = function(req, res, next) {
        //query with mongoose
        var query = dbSchemas.SomeValue.find({}).select({ "name": 1, "_id": 0});
    
        query.exec(function (err, someValue) {
            if (err) return next(err);
            res.send(someValue);
        });
    };
    • Creo que .select sólo es un filtro para seleccionar el campo después de conseguir todo eso, mi recomendación es utilizar .find({}, 'name -_id')
    • parece que no funciona?
    • es que hay una manera de obtener el valor directo, sin obj como [ ‘valor1’, ‘valor2’, ‘valor3’ ] en lugar de [ ‘nombre’:’valor1′, ‘nombre’:’valor2′, ‘nombre’:’valor3′ ]
  2. 57

    Hay una manera más rápida de hacer esto ahora:

    exports.someValue = function(req, res, next) {
        //query with mongoose
        dbSchemas.SomeValue.find({}, 'name', function(err, someValue){
          if(err) return next(err);
          res.send(someValue);
        });
        //this eliminates the .select() and .exec() methods
    };

    En caso de querer más de la Schema fields y desea omitir sólo un par, usted puede prefijar el campo name con un -. Para el ex "-name" en el segundo argumento se no incluyen name campo en el doc mientras que el ejemplo dado aquí tendrá sólo la name campo en el devuelve docs.

    • Para aquellos que quieren filtrar varios campos, no separados con comas, simplemente el espacio: blogItemModel.find({}, 'title intro_image intro_text publish_date', function(err, blog_items){..
    • para aquellos que quieren utilizar la cláusula where arriba de dbSchema.Somevalue.find({userEmail:’[email protected].com’},’userEmail -_id’, function(err, someValue)
    • varios campos sería [‘nombre’, ‘campo2’, ‘field3’, ‘etc’] en lugar de simplemente ‘nombre’
    • aceptable respuesta , gracias
  3. 19

    Hay una mejor manera de manejar el uso de los Nativos de MongoDB código en la Mangosta.

    exports.getUsers = function(req, res, next) {
    
        var usersProjection = { 
            __v: false,
            _id: false
        };
    
        User.find({}, usersProjection, function (err, users) {
            if (err) return next(err);
            res.json(users);
        });    
    }

    http://docs.mongodb.org/manual/reference/method/db.collection.find/

    Nota:

    var usersProjection

    La lista de objetos que se muestran aquí no serán devueltos /impreso.

    • ¿Cómo se puede hacer esto con findOne?
    • cuestionario de necesidades en nombre de matriz json. con el otro método clave de allí que también vendrá, como la edad,etc
    • Impresionante, justo lo que estaba buscando
  4. 7

    DB Datos

    [
      {
        "_id": "70001",
        "name": "peter"
      },
      {
        "_id": "70002",
        "name": "john"
      },
      {
        "_id": "70003",
        "name": "joseph"
      }
    ]

    Consulta

    db.collection.find({},
    {
      "_id": 0,
      "name": 1
    }).exec((Result)=>{
        console.log(Result);
    })

    De salida:

    [
      {
        "name": "peter"
      },
      {
        "name": "john"
      },
      {
        "name": "joseph"
      }
    ]

    De trabajo de la muestra de juegos

    enlace

  5. 3

    La precisa manera de hacer esto es utilizar .proyecto() método de cursor con el nuevo mongodb y nodejs conductor.

    var query = await dbSchemas.SomeValue.find({}).project({ name: 1, _id: 0 })
    • .project() sólo funciona con agregado. Si quieres usarlo con encontrar a usar el segundo argumento en find({},{ name: 1, _id: 0 }) método.
    • No con el nuevo mongodb nodo controlador tiene que utilizar de esta manera. Pero con la mangosta puede utilizar como segundo argumento.
    • ah, es en nodejs conductor.
    • No entiendo por qué, pero en las nuevas versiones @Anthony es justo…versiones Inferiores puede hacerlo de esta manera…muy desordenado

Dejar respuesta

Please enter your comment!
Please enter your name here