web-dev-qa-db-fra.com

Comment exclure un champ particulier d'une collection dans Mongoose?

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.

49
dany

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.

102
JohnnyHK

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.

27
Philipp
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.

17
Danieldms

Tu pourrais faire ça

const products = await Product.find().select(['-image'])
0
Aditya