MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB conta un valore distinto?

Mentre .distinct() funziona bene solo per ottenere i valori distinti per un campo, al fine di ottenere effettivamente il conteggio delle occorrenze, questo è più adatto al framework di aggregazione:

Collection.aggregate([
    { "$group": {
        "_id": "$field",
        "count": { "$sum": 1 }
    }}
],function(err,result) {

});

Anche il .distinct() il metodo "astratto" da dove il campo "distinto" specificato si trova effettivamente all'interno di una matrice. In questo caso devi chiamare $unwind prima di elaborare gli elementi dell'array qui:

Collection.aggregate([
    { "$unwind": "$array" },
    { "$group": {
        "_id": "$array.field",
        "count": { "$sum": 1 }
    }}
],function(err,result) {

});

Quindi il lavoro principale viene sostanzialmente svolto nel $group mediante "raggruppamento" sui valori del campo, che significa la stessa cosa di "distinto". Il $sum è un operatore di raggruppamento che in questo caso somma semplicemente 1 per ogni occorrenza di quel valore nel campo per quella raccolta.