0
votes

Combinez les résultats basés sur une condition pendant le groupe par

Query de Mongo généré par Java Code:

{ 
    "pipeline": [{
        "$match": {
            "Id": "09cd9a5a-85c5-4948-808b-20a52d92381a"
        }
    },
    {
        "$group": {
            "_id": "$result",
            "id": {
                "$first": "$result"
            },
            "labelKey": {
                "$first": {
                    "$ifNull": ["$result",
                    "$result"]
                }
            },
            "value": {
                "$sum": 1
            }
        }
    }]
}


3 commentaires

Pouvez-vous partager l'échantillon de sortie? Que devrait être le résultat de la requête!


Pour les valeurs de null ou "video vide" "" alors faites quelque chose comme {"$ groupe": {"$ ifnull": [ "$ résultat", ""]} ,.same accumulateurs ..}} . Le $ IFNULL Tranposerait tout autre NULL Valeurs de $ résultat dans la touche de regroupement pour être une "chaîne vide", comme les autres valeurs Ce domaine sont lesquels vous voulez les "grouper" avec. Si vous aviez besoin de quelque chose de plus élaboré, vous pouvez regarder $ Cond . Mais il s'agit essentiellement de tester la valeur résultat dans le groupe _ID et combinant là où vous le souhaitez.


Notez également que $ premier ou $ DERNIER ne doit vraiment pas être utilisé sans un $ trier Stage précédant le groupe $ (code> . Donc, votre code devrait vraiment inclure un $ trier pour mettre les choses dans l'ordre attendu en premier, sinon il n'y a rien qui détermine ce que $ Premier prend en réalité. changerait les itérations ultérieures du code.


3 Réponses :


0
votes

Je suis sûr que je suis sûr une voie plus "appropriée", mais c'est ce que je pourrais aborder rapidement: XXX

En raison du fait que le second groupe est uniquement sur 4 documents sur 4 documents Ne vous sentez pas trop mal de le faire.


0 commentaires

0
votes

J'ai utilisé $ facet .

la MongoDB Stage $ Facet vous permet d'exécuter plusieurs pipelines indépendants dans le stade d'un pipeline, tout en utilisant les mêmes données. Cela signifie que vous pouvez exécuter plusieurs agrégations avec les mêmes étapes préliminaires et les étapes successives. P> xxx pré>

sortie: p>

{
"results": [{
    "_id": null, 
    "value": 52 // count of both '' and null.
}, {
    "_id": "Approved",
    "value": 83
}, {
    "_id": "Rejected",
    "value": 3661
}]
}


0 commentaires

0
votes

Changer le groupe par comme ci-dessous résolu le problème

{
    "$group": {
        "_id": {
            "$ifNull": ["$result", ""]
        },
        "id": {
            "$first": "$result"
        },
        "labelKey": {
            "$first": {
                "$ifNull": ["$result",
                "$result"]
            }
        },
        "value": {
            "$sum": 1
        }
    }
}


0 commentaires