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 }}])
Était-ce utile?

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" ] }
])
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top