web-dev-qa-db-fra.com

Mongo $ group avec $ project

J'essaie d'obtenir le nombre de mots clés avec parentId, categioryId et llcId. Mon db est

{
    "_id" : ObjectId("5673f5b1e4b0822f6f0a5b89"),
    "keyword" : "electronic content management system",
    "llcId" : "CL1K9B",
    "categoryId" : "CL1K8V",
    "parentId" : "CL1K8V",

}

J'ai essayé $project avec $group

db.keyword.aggregate([
    {
        $group: {
            _id: "$llcId",
            total: {$sum: 1},
        }
    },
    {
        $project: {
            categoryId: 1, total: 1
        }
    }
])

Et ça me donne un résultat comme

{ "_id" : "CL1KJQ", "total" : 17 }
{ "_id" : "CL1KKW", "total" : 30 }

Mais j'ai également besoin de données réelles, par exemple llcId, categoryId, keyword, total. J'ai essayé d'afficher cetgoryId et le mot clé en utilisant $project mais il n'affiche que _id et total. Qu'est-ce qui me manque?

22
Prashant Thorat

Pour obtenir le nombre keyword, vous devez regrouper les documents par le champ keyword, puis utiliser l'opérateur accumulateur $sum pour obtenir le nombre de documents. En ce qui concerne les autres valeurs de champ, puisque vous regroupez tous les documents par valeur de mot-clé, le mieux que vous puissiez faire pour obtenir les autres champs est d'utiliser le $first opérateur qui renvoie une valeur du premier document pour chaque groupe. Sinon, vous devrez peut-être utiliser le $Push opérateur pour renvoyer un tableau des valeurs de champ pour chaque groupe:

var pipeline = [
    {
        "$group": {
            "_id": "$keyword",
            "total": { "$sum": 1 },
            "llcId": { "$first": "$llcId"},
            "categoryId": { "$first": "$categoryId"},
            "parentId": { "$first": "$parentId"}
        }
    }
];

db.keyword.aggregate(pipeline)
35
chridam

Vous regroupez par llcId donc cela donnera plus d'un categoryId par llcId. Si vous voulez categoryId comme dans votre résultat, vous devez l'écrire dans votre requête de groupe. Par exemple:

db.keyword.aggregate([
{
    $group: {
        _id: "$llcId",
        total: {$sum: 1},
        categoryId:{$max:"$categoryId"}
    }

},
{
    $project: {
        categoryId: 1, total: 1
    }
}])
5
Sirisha