tengo la siguiente función agregada en mi código para contar cuántas veces se encuentra un valor en la base de datos:
let data: any = await this.dataModel.aggregate( [ { $match: { field: new ObjectID(fieldID), }, }, { $group: { _id: "$value", total_for_value: { $sum: 1 }, }, }, ] );Esto funciona correctamente, sin embargo, mi configuración de datos es un poco diferente. Tengo dos tipos de campos de valor. Algo como esto:
{ "_id" : ObjectId("123"), "value" : "MALE" }y algunos como este:
{ "_id" : ObjectId("456"), "value" : { "value" : "MALE", } }¿Hay alguna manera de agrupar aquellos en los que _id y _id.value son iguales? De momento los cuenta por separado.
db.collection.aggregate([ { "$addFields": { "key2": { "$cond": { "if": { $and: [ { "$eq": [ { "$type": "$key" }, "object" ] } ] }, "then": "$key.value", "else": "$key" } } } }, { "$group": { "_id": "$key2", "data": { $push: "$$ROOT" } } } ]) Esto haría el trabajo si _id.value es un objeto.