J'essaie de sélectionner uniquement un champ spécifique avec
exports.someValue = function(req, res, next) {
//query with mongoose
var query = dbSchemas.SomeValue.find({}).select('name');
query.exec(function (err, someValue) {
if (err) return next(err);
res.send(someValue);
});
};
Mais dans ma réponse json, je reçois également le _id, mon schéma de document n'a que deux fiels, _id et name
[{"_id":70672,"name":"SOME VALUE 1"},{"_id":71327,"name":"SOME VALUE 2"}]
Pourquoi???
javascript
node.js
mongodb
mongoose
TlonXP
la source
la source
.select
que c'est juste un filtre pour choisir le champ après avoir obtenu tout cela, ma recommandation est d'utiliser.find({}, 'name -_id')
.find({}, 'name -_id')
semble ne pas fonctionner?Il existe un moyen plus court de faire cela maintenant:
Si vous voulez la plupart des
Schema fields
et n'en omettez que quelques-uns, vous pouvez préfixer le champname
avec un-
. Par exemple,"-name"
le deuxième argument n'inclura pas dename
champ dans le document alors que l'exemple donné ici n'aura que lename
champ dans les documents retournés.la source
blogItemModel.find({}, 'title intro_image intro_text publish_date', function(err, blog_items){..
Il existe un meilleur moyen de le gérer en utilisant le code MongoDB natif dans Mongoose.
http://docs.mongodb.org/manual/reference/method/db.collection.find/
Remarque:
La liste des objets listés ici ne sera pas retournée / imprimée.
la source
Données DB
Requete
Production:
Terrain de jeu d'échantillons de travail
lien
la source
Exclure
Le code ci-dessous récupérera tous les champs autres que le mot de passe dans chaque document:
Production
Comprendre
Le code ci-dessous ne récupérera que le champ de courrier électronique dans chaque document:
Production
la source
La manière précise de le faire est d'utiliser la
.project()
méthode du curseur avec le nouveau pilotemongodb
etnodejs
.la source
.project()
fonctionne uniquement avec des agrégats. Si vous souhaitez l'utiliser avec find, utilisez le second argument defind({},{ name: 1, _id: 0 })
method.Par exemple,
0 signifie ignorer
1 signifie montrer
la source