2013-07-23 5 views
0

j'ai données comme celui-ciComment utiliser distinct avec pipeline dans MongoDB en utilisant python

{ "_id": "1234gbrghr", 
    "Device" : "samsung", 
    "UserId" : "12654", 
    "Month" : "july" 
}, 

{ "_id": "1278gbrghr", 
    "Device" : "nokia", 
    "UserId" : "87654", 
    "Month" : "july" 
}, 

{ "_id": "1234gbrghr", 
    "Device" : "samsung", 
    "UserId" : "12654", 
    "Month" : "july" 
} 

je dois obtenir le pas d'utilisateur distinct pour un dispositif particulier au mois de juillet. par exemple "Si un utilisateur (UserId) a utilisé deux fois ou plus un appareil samsung au mois de juillet, il le comptera comme un samsung

Pour cela j'ai utilisé cette requête pour obtenir le nombre total d'utilisateurs dans le . le mois de juillet, mais je dois obtenir le pas distinct des utilisateurs

pipeline1 = [ 

      {'$match':{'Month':'july'}}, 
      {'$group':{'_id' : '$Device', 'count' : { '$sum' : 1 }}} 
      ] 
    data = db.command('aggregate', 'collection', pipeline=pipeline1); 

Répondre

0

Vous devrez groupe sur l'appareil et utilisateur au lieu d'abord, vous pouvez le faire avec l'opérateur de pipeline suivant:.

{'$group':{'_id' : { d: '$Device', u: '$UserId' } } } 

Et puis d'autre part yo u besoin de compter le nombre d'appareils par utilisateur (comme vous aviez déjà, mais slighty modifié:

{ '$group': { '_id' : '$_id.d', 'count': { '$sum' : 1 } } } 

Avec l'ensemble de données suivantes:

{ "_id" : "1234gbrghr", "Device" : "samsung", "UserId" : "12654", "Month" : "july" } 
{ "_id" : "1278gbrghr", "Device" : "nokia", "UserId" : "87654", "Month" : "july" } 
{ "_id" : "1239gbrghr", "Device" : "samsung", "UserId" : "12654", "Month" : "july" } 
{ "_id" : "1238gbrghr", "Device" : "samsung", "UserId" : "12653", "Month" : "july" } 

Et la commande globale suivante:

db.so.aggregate([ 
    { '$match' : {'Month' : 'july' } }, 
    { '$group' : { 
     '_id' : { d: '$Device', u: '$UserId' }, 
     'count' : { '$sum' : 1 } 
    } }, 
    { '$group': { 
     '_id' : '$_id.d', 
     'count': { '$sum' : 1 } 
    } } 
]); 

Sorties:

{ 
    "result" : [ 
     { 
      "_id" : "nokia", 
      "count" : 1 
     }, 
     { 
      "_id" : "samsung", 
      "count" : 2 
     } 
    ], 
    "ok" : 1 
} 
+0

merci Derick. Ça marche – user21

Questions connexes