Подтвердить что ты не робот

Mongoose, выберите определенное поле с помощью find

Я пытаюсь выбрать только определенное поле с

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

Но в моем json-ответе я получаю также _id, моя схема документа имеет только два типа: _id и name

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

Почему???

4b9b3361

Ответ 1

Поле _id всегда присутствует, если вы явно не исключили его. Сделайте это с помощью синтаксиса -:

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

Или явно через объект:

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

Ответ 2

Теперь есть более короткий способ:

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
};

Если вы хотите большую часть Schema fields и хотите опустить только несколько, вы можете префикс поля name с помощью -. Для ex "-name" во втором аргументе не включает name поле в документе, тогда как приведенный здесь пример будет иметь только поле name в возвращаемых документах.

Ответ 3

Там лучший способ справиться с ним, используя Native MongoDB-код в Mongoose.

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/

Примечание:

var usersProjection

Список объектов, перечисленных здесь, не будет возвращен/распечатан.

Ответ 4

db.someschema.find( { }, { name: 1 } ).exec(function(err,Result){
  var NameArray = Result;
  console.log(NameArray);
})

Вывод:

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