Как исключить одно конкретное поле из коллекции в 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.
Ответы
Ответ 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
});
этот код работал в моем проекте. Благодарю!! хорошо провести день.