Pregunta

Esta es una pregunta muy fácil, simplemente tener un congelamiento cerebral muy fuerte.En mi agregación, solo quiero eliminar el campo '_id' usando $project pero devuelve todo lo demás.Sin embargo, estoy consiguiendo

$projection requiere al menos un campo de salida

Yo pensaría que es como:

db.coll.aggregate( [ { $match .... }, { $project: { _id: 0 }}])
¿Fue útil?

Solución

Debe incluir campos explícitamente cuando utilice la agregación, ya sea a través de varias operaciones de canalización o mediante $project.Actualmente no existe una manera de devolver todos los campos a menos que se definan explícitamente por el nombre del campo:

$project : {
   _id : 0,
   "Name" : 1,
   "Address" : 1
}

Puedes excluir el _id utilizando la técnica que utilizó y como se muestra arriba.

Otros consejos

de v4.2 , puede hacer uso de Operador agregado $unset para eliminar campos individuales o múltiples.También puede excluir un campo o campos desde un documento incrustado usando la notación de puntos.

para eliminar un solo campo:

db.coll.aggregate([ { $unset: "_id" } ])

Para eliminar múltiples campos:

db.coll.aggregate([ { $unset: [ "_id" ] } ])

para eliminar los campos incrustados:

db.coll.aggregate([
   { $unset: [ "_id", "author.name" ] }
])

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top