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 aussi le _id, mon schéma de document n'a que deux champs, _id et name
[{"_id":70672,"name":"SOME VALUE 1"},{"_id":71327,"name":"SOME VALUE 2"}]
Pourquoi???
Le champ _id
est toujours présent, sauf si vous l'excluez explicitement. Faites-le en utilisant la syntaxe -
:
exports.someValue = function(req, res, next) {
//query with mongoose
var query = dbSchemas.SomeValue.find({}).select('name -_id');
query.exec(function (err, someValue) {
if (err) return next(err);
res.send(someValue);
});
};
Ou explicitement via un objet:
exports.someValue = function(req, res, next) {
//query with mongoose
var query = dbSchemas.SomeValue.find({}).select({ "name": 1, "_id": 0});
query.exec(function (err, someValue) {
if (err) return next(err);
res.send(someValue);
});
};
Il y a un moyen plus court de le faire maintenant:
exports.someValue = function(req, res, next) {
//query with mongoose
dbSchemas.SomeValue.find({}, 'name', function(err, someValue){
if(err) return next(err);
res.send(someValue);
});
//this eliminates the .select() and .exec() methods
};
Si vous voulez utiliser le plus de Schema fields
et en omettre quelques-uns, vous pouvez préfixer le champ name
d'un -
. Par exemple, _ "-name"
dans le deuxième argument non inclut le champ name
dans le document alors que le L'exemple donné ici aura seulement le champ name
dans les documents retournés.
Il existe un meilleur moyen de le gérer à l'aide du code Native MongoDB dans Mongoose.
exports.getUsers = function(req, res, next) {
var usersProjection = {
__v: false,
_id: false
};
User.find({}, usersProjection, function (err, users) {
if (err) return next(err);
res.json(users);
});
}
http://docs.mongodb.org/manual/reference/method/db.collection.find/
Remarque:
var usersProjection
La liste des objets listés ici ne sera pas retournée/imprimée.
Données DB
[
{
"_id": "70001",
"name": "peter"
},
{
"_id": "70002",
"name": "john"
},
{
"_id": "70003",
"name": "joseph"
}
]
Requete
db.collection.find({},
{
"_id": 0,
"name": 1
}).exec((Result)=>{
console.log(Result);
})
Sortie:
[
{
"name": "peter"
},
{
"name": "john"
},
{
"name": "joseph"
}
]
Exemple de terrain de travail
La manière précise de le faire est d’utiliser la méthode de curseur .project()
== avec la nouvelle mongodb
et nodejs
pilote.
var query = await dbSchemas.SomeValue.find({}).project({ name: 1, _id: 0 })