Los datos que tengo son:
[ { type: 'software' }, { type: 'hardware' }, { type: 'software' }, { type: 'network' }, { type: 'test' }, ... ]Quiero crear un grupo MongoDB por tubería de agregación para devolver los datos de esta manera: solo quiero 3 objetos en el resultado, el tercer objeto en el resultado {_id: 'otro', recuento: 2}, esta debería ser la suma de recuentos de tipo otro que software y hardware
[ {_id: 'software', count: 2}, {_id: 'hardware', count: 1}, {_id: 'other', count: 2}, ]Esta es la consulta exacta (MongoPlayground) que necesita si esos datos son documentos separados. Simplemente agregue $project antes del grupo y luego $switch operador. (Si esos datos de campo son números, es posible que desee verificar $bucket
db.collection.aggregate([ { "$project": { type: { "$switch": { "branches": [ { "case": { "$eq": [ "$type", "software" ] }, "then": "software" }, { "case": { "$eq": [ "$type", "hardware" ] }, "then": "hardware" } ], default: "other" } } } }, { "$group": { "_id": "$type", "count": { "$sum": 1 } } } ])Además, me gustaría recomendar evitar el
typede nombre de campo. En realidad, no se reserva en MongoDB, pero sin embargo, podría generar conflictos con algunos controladores ya que, en los archivos de esquema/modelo, los campos de tipo se refieren al tipo BSON exacto del campo.