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

Как исключить одно конкретное поле из коллекции в Mongoose?

У меня есть приложение NodeJS с Mongoose ODM (Mongoose 3.3.1). Я хочу получить все поля, кроме 1 из моей коллекции. Например: у меня есть коллекция продуктов, у которых есть 6 полей, я хочу выбрать все, кроме поля "Изображение". Я использовал метод исключить, но получил ошибку.. Это был мой код.

    var Query = models.Product.find();
    Query.exclude('title Image');

    if (req.params.id) {
        Query.where('_id', req.params.id);
    }


    Query.exec(function (err, product) {
        if (!err) {
            return res.send({ 'statusCode': 200, 'statusText': 'OK', 'data': product });
        } else {
            return res.send(500);
        }
    });

Но это возвращает ошибку

Express
500 TypeError: Object #<Query> has no method 'exclude'.........

Также я попытался, var Query = models.Product.find().exclude('title','Image'); и var Query = models.Product.find({}).exclude('title','Image'); Но получить ту же ошибку. Как исключить одно или два отдельных поля из коллекции в Mongoose.

4b9b3361

Ответ 1

Используйте query.select для выбора поля в текущих (3.x) сборках Mongoose.

Префикс имени поля, которое вы хотите исключить, с помощью -; поэтому в вашем случае:

Query.select('-Image');

Быстрая сторона: в JavaScript переменные, начинающиеся с большой буквы, должны быть зарезервированы для функций конструктора. Поэтому рассмотрите переименование Query как Query в вашем коде.

Ответ 2

Я не знаю, где вы читаете эту функцию .exclude, потому что я не могу найти ее в какой-либо документации.

Но вы можете исключить поля, используя второй параметр метода find.

Вот пример из официальной документации:

db.inventory.find( { type: 'food' }, { type:0 } )

Эта операция возвращает все документы, в которых значение поля типа является пищей, но не включает в себя поле типа на выходе.

Ответ 3

Model.findOne({ _id: Your Id}, { password: 0, name: 0 }, function(err, user){
  // put your code
});

этот код работал в моем проекте. Благодарю!! хорошо провести день.