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.
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()
.
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
});
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);
});
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 ){}.....
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.
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.
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);
}
});
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);
});