Je voudrais récupérer des données d'un paramètre Mongoose dans mon application Node.js. J'ai remarqué que peu importe ce que j'écris comme sélection de champ, j'obtiens toujours le _id
champ. Existe-t-il un moyen de ne pas le récupérer? Voici comment je fais en ce moment:
Transaction.find({username : user.username}, ['uniqueId', 'timeout', 'confirmation_link', 'item_name'], function(err, txs){
console.log("user : " + user.username + " with txs: " + txs);
callback(txs);
});
Et me enregistre les résultats qui contiennent le _id
champ.
_id
doit être spécifiquement exclu. Par exemple,
Transaction.find({username : user.username}, { '_id': 0, 'uniqueId' :1, 'timeout': 1, 'confirmation_link': 1, 'item_name': 1}, function(err, txs){
console.log("user : " + user.username + " with txs: " + txs);
callback(txs);
});
Une autre façon consiste à utiliser l'argument texte avec le préfixe -
qui exclura tel ou tel champ du résultat:
Entity.find({ ... }, '-_id field1 field2', function(err, entity) {
console.log(entity); // { field1: '...', field2: '...' }
});
Une autre approche:
.toJSON()
du schéma en supprimant les champs _id
Et __v
.toJSON()
sur tous les objets DB envoyés au clientitem.id === 'something'
Parce que typeof id === 'string'
, Pas ObjectId
._id
Car il n'y en a pas, juste un id
qui est ignoré.Augmenter JSON:
mySchema.set('toJSON', {
virtuals: true,
transform: (doc, ret, options) => {
delete ret.__v;
ret.id = ret._id.toString();
delete ret._id;
},
});
Vous pouvez donc utiliser:
let item = (await MyCollection.findOne({/* search */}).exec()).toJSON();
if (item.id === 'someString') return item;
Je sais que c'est moche. Mais c'est la meilleure mauvaise idée que j'ai jusqu'à présent.
Dans la version 5.2.13 de Mongoose (septembre 2018) - en utilisant l'approche du générateur de requêtes, la même chose peut être convertie en
async function getUserDetails(user) {
try {
if (!user || !user.name) return;
const result = await Transaction.
find({username : user.username}).
select('uniqueId timeout confirmation_link item_name -_id');
// Adding minus sign before the _id (like -_id) in the select string unselects the _id which is sent by default.
console.log(result);
} catch(ex) {
return ex
}
}