web-dev-qa-db-fra.com

Utilisation mangouste de la méthode .select ()

Je suis assez confus avec l'utilisation de la méthode select. Voici comment je l'utilise, et c'est faux:

Transaction.find({username : user.username}).select('uniqueId', 'confirmation_link', 'item_name', 'timeout', 'username', function(err, txs){
        callback(txs);
});

Ce que j'essaie de réaliser, c'est simplement de sélectionner dans les transactions de la base de données celles avec ce nom d'utilisateur et je veux supprimer uniquement les champs répertoriés dans la méthode select. Quelqu'un peut-il indiquer comment utiliser la méthode select? Merci.

37
Masiar

les docs disent que vous pouvez réaliser ceci comme ceci:

Mongoose v4.0

// Retrieving only certain fields

Model.find({}, 'first last', function (err, docs) {

});

ancienne API obsolète

// Retrieving only certain fields

Model.find({}, ['first', 'last'], function (err, docs) {
  // docs is an array of partially-`init`d documents
  // defaults are still applied and will be "populated"
});

vous pouvez donc le faire sans select().

66
pkyeck

Il existe maintenant une méthode plus courte pour ce faire (sans utiliser .select et sans utiliser de tableau), en passant simplement les champs séparés par des espaces comme deuxième argument

User.find({}, 'first last', function (err, usr) {
    //Got the result, saved a few bytes of code
});

Les documents

19
Felipe Pereira

c'est une autre façon: requêtes en mangouste

Transaction.find({username : user.username})
.select('uniqueId confirmation_link item_name timeout username')
.exec(function(err, txs) {
        console.log(txs);
});
16
lee

Pour récupérer certains champs sans récupérer le '_id' vous pouvez spécifier de l'exclure

Model.find({}, {'Username':1, '_id':0}, function ( err, docs ){}.....
10
Alex Stubbs

Cela a été très utile: Comment protéger le champ de mot de passe dans Mongoose/MongoDB afin qu'il ne revienne pas dans une requête lorsque je remplis des collections?

On dirait que vous avez quelques options.

1) Utilisez select('-_id'). 2) Utilisez find({whatever: values}, '-_id', callback...}. Je ne peux pas vérifier cette méthode, mais si elle fonctionne avec select(), je ne vois pas pourquoi cela ne fonctionnerait pas ici.

9
tandrewnichols

Pour récupérer uniquement des champs spécifiques, utilisez ce qui suit,

Model.find({/*Your query*/}, {'firstName':1, 'lastname':1, '_id':0}, //Notice, this will omit _id! function ( err, docs ){}.....

cela fonctionnera et n'apportera AUCUN identifiant supplémentaire tel que _id.

4

l'opération de sélection et de projection peut être effectuée de cette manière facilement dans nodejs. Essaye ça

    var Selection={
        <some key of data model > : <target value for that key field>,
        <some key of data model > : <target value for that key field>
        //you can add many parameters here selection operation
        };
    var Projection = {
        __v    : false,
        _id    : false
        //you can add many parameters here for projection
    };
    <DataModel>.find(Selection,Projection,function (err,data) {
        if(err){
            console.log(err);
        }else{
         console.log(data);
        }
    });
3
Chanaka Fernando

Supprimez les virgules et les guillemets entre les champs que vous souhaitez sélectionner:

Transaction.find({username : user.username}).select('uniqueId confirmation_link item_name timeout username', function(err, txs){
    callback(txs);
});
1
Eric