[Registros diarios de MongoDB] El método para encontrar el recuento (un campo distinto) después del grupo

Hoy, encontré group后 count(distinct f1)un . Nota: f1 representa un campo

La idea general es: después de agrupar según la clave 1, encuentre el número único del campo f1 en el grupo

1. implementación mysql

  • El pseudo-sql es el siguiente: (esto es bastante simple)
select key1, count(distinct f1) from t group by key1
复制代码

2. ¿Cómo lo implementa mongo?

  • mongo se implementa de la siguiente manera:
db.t.aggregate([
    {$match: {
        createTime: { $gte: 1, $lt: 8888888888888888 }
     }},
    {
        '$group': {
            "_id": {'key1':'$key1'},
            f1DistinctCount:{$addToSet:"$f1"},
            successCount: {
                $sum: {
                    $cond: [
                        {
                            $and: [
                                { $eq: ['$successOrFail', 1] }]
                        },
                        1,
                        0
                    ]
                }
            },
            failCount: {
                $sum: {
                    $cond: [
                        {$and: [
                              { $eq: ['$successOrFail', 0] }]
                        },
                        1,
                        0
                    ]

                }
            }
        },

    },
    {
        '$project': {
            '_id': 1, 'key1':1,'successCount': 1, 'failCount': 1,'f1DistinctCount':1
        }
    }
],{allowDiskUse: true});
复制代码

f1DistinctCount es una colección establecida. Si usa mongotemplate, es una colección com.mongodb.BasicDBList. Saque la longitud de la colección para obtener el resultado que quiero.

Por supuesto, si tiene una mejor manera, puede intercambiar discusiones y aprender juntos.

Supongo que te gusta

Origin juejin.im/post/7078541935190736903
Recomendado
Clasificación