J'ai une application NodeJS avec Mongoose ODM (Mongoose 3.3.1). Je veux récupérer tous les champs sauf 1 de ma collection. Par exemple: J'ai une collection Produit qui a 6 champs, je veux tout sélectionner sauf un champ "Image". J'ai utilisé la méthode "exclude", mais j'ai eu une erreur .. C'était mon code.
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);
}
});
Mais cela renvoie erreur
Express
500 TypeError: Object #<Query> has no method 'exclude'.........
J'ai aussi essayé, var Query = models.Product.find().exclude('title','Image');
et var Query = models.Product.find({}).exclude('title','Image');
Mais obtenant la même erreur. Comment exclure un/(deux) champs particuliers d'une collection dans Mongoose.
Utilisation query.select
pour la sélection des champs dans les versions actuelles (3.x) de Mongoose.
Préfixez un nom de champ que vous souhaitez exclure avec un -
; donc dans votre cas:
Query.select('-Image');
Petit côté: en JavaScript, les variables commençant par une majuscule doivent être réservées aux fonctions constructeurs. Pensez donc à renommer Query
en query
dans votre code.
Je ne sais pas où vous lisez cette fonction .exclude, car je ne la trouve dans aucune documentation.
Mais vous pouvez exclure des champs à l'aide du deuxième paramètre de la méthode find.
Voici un exemple de la documentation officielle :
db.inventory.find( { type: 'food' }, { type:0 } )
Cette opération renvoie tous les documents dont la valeur du champ type est nourriture, mais n'inclut pas le champ type dans la sortie.
Model.findOne({ _id: Your Id}, { password: 0, name: 0 }, function(err, user){
// put your code
});
ce code a fonctionné dans mon projet. Merci!! bonne journée.
Tu pourrais faire ça
const products = await Product.find().select(['-image'])