Comment supprimer seulement un ou deux champs des documents dans mongodb ?
-
21-12-2019 - |
Question
C’est une question très simple, il suffit d’avoir un très grave gel du cerveau.Dans mon agrégation, je souhaite simplement supprimer le champ '_id' en utilisant $project
mais rends tout le reste.Cependant, j'obtiens
$projection nécessite au moins un champ de sortie
Je penserais que c'est comme :
db.coll.aggregate( [ { $match .... }, { $project: { _id: 0 }}])
La solution
Vous devez inclure explicitement des champs lorsque vous utilisez l'agrégation, soit via diverses opérations de pipeline, soit via $project
.Il n'existe actuellement aucun moyen de renvoyer tous les champs, sauf si cela est explicitement défini par le nom du champ :
$project : {
_id : 0,
"Name" : 1,
"Address" : 1
}
Vous pouvez exclure le _id
en utilisant la technique que vous avez utilisée et comme indiqué ci-dessus.
Autres conseils
Depuis v4.2, vous pouvez utiliser $unset
opérateur d’agrégation pour supprimer un ou plusieurs champs.Vous pouvez également exclure un ou plusieurs champs d'un document incorporé à l'aide de la notation par points.
Pour supprimer un seul champ :
db.coll.aggregate([ { $unset: "_id" } ])
Pour supprimer plusieurs champs :
db.coll.aggregate([ { $unset: [ "_id" ] } ])
Pour supprimer des champs incorporés :
db.coll.aggregate([
{ $unset: [ "_id", "author.name" ] }
])