2017-08-08 1 views
0

Ich versuche, Daten innerhalb der Gruppe mit der Anzahl zu gruppieren.Gruppe in Gruppe und Zählung mit Aggregation Framework in MongoDB

{ 
     "_id" : ObjectId("59899846b5f5670840040b0b"), 
     "client_id" : "merlin", 
     "scope" : "eee", 
     "user_id" : "u", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T10:53:58.816Z"), 
     "open_url" : null, 
     "__v" : 0 
} 
{ 
     "_id" : ObjectId("59899849b5f5670840040b0c"), 
     "client_id" : "merlin", 
     "scope" : "eee", 
     "user_id" : "u", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T10:54:01.908Z"), 
     "open_url" : null, 
     "__v" : 0 
} 
{ 
     "_id" : ObjectId("5989984db5f5670840040b0d"), 
     "client_id" : "merlin", 
     "scope" : "eee", 
     "user_id" : "y", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T10:54:05.280Z"), 
     "open_url" : null, 
     "__v" : 0 
} 
{ 
     "_id" : ObjectId("5989adb2d699bd211caa07ad"), 
     "client_id" : "symphony", 
     "scope" : "eee", 
     "user_id" : "q", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T12:25:22.518Z"), 
     "open_url" : null, 
     "__v" : 0 
} 
{ 
     "_id" : ObjectId("5989adb8d699bd211caa07ae"), 
     "client_id" : "symphony", 
     "scope" : "eee", 
     "user_id" : "w", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T12:25:28.954Z"), 
     "open_url" : null, 
     "__v" : 0 
} 
{ 
     "_id" : ObjectId("5989adbcd699bd211caa07af"), 
     "client_id" : "symphony", 
     "scope" : "eee", 
     "user_id" : "q", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T12:25:32.753Z"), 
     "open_url" : null, 
     "__v" : 0 
} 
{ 
     "_id" : ObjectId("5989adc0d699bd211caa07b0"), 
     "client_id" : "symphony", 
     "scope" : "eee", 
     "user_id" : "r", 
     "user_directory" : "kmdkcn", 
     "createdAt" : ISODate("2017-08-08T12:25:36.176Z"), 
     "open_url" : null, 
     "__v" : 0 
} 

Was ich will, ist auf Gruppendaten auf der Grundlage von client_id und weiter auf der Grundlage von user_id die Anzahl der Dokumente zu erhalten.

Ich habe dies versucht: -

Logger.aggregate([ 
    { "$group": { 
     "_id": {client: "$client_id"}, 
     "count": { "$sum": 1 } 
    }} 
]) 

Ich erhalte: - Client: merlin Zahl: 3, Client: Symphonie, Anzahl: 4

Aber wie diese auf Gruppe die Basis von user_id.

Ich mag die letzte Ausgabe sein würde: -

Client: merlin, Anzahl: 2, Client: Symphonie, Anzahl: 3

+0

Meinst du * "jeder Client für jeden Benutzer"? * –

Antwort

0

Hier ist die Abfrage.

db.collection.aggregate([ 
    { "$group": { 
     "_id": {client: "$client_id" }, 
     "clientIdCount": { "$sum": 1 }, 
     "userids" : {"$addToSet" : "$user_id"} 
    } 
    }, 
    { "$project" : {"_id.client" : 1, "clientIdCount" : 1, numberOfUsers : {$size : "$userids"} } 
    } 
]); 

Ausgang: -

Wenn Sie nicht wollen, clientIdCount in der Ausgabe, nur den Wert von 1 neben clientIdCount-0 vorhanden ändern.

/* 1 */ 
{ 
    "_id" : { 
     "client" : "symphony" 
    }, 
    "clientIdCount" : 4, 
    "numberOfUsers" : 3 
} 

/* 2 */ 
{ 
    "_id" : { 
     "client" : "merlin" 
    }, 
    "clientIdCount" : 3, 
    "numberOfUsers" : 2 
} 
+0

Vielen Dank Notionquest. –

+0

Bitte akzeptieren Sie die Antwort, wenn es hilfreich war. – notionquest

0

Wenn ich Ihre Frage richtig dies Ihre db Abfrage

verstanden
db.Logger.aggregate([ 
     { 
      $group : { 
       _id : "$client_id", user : { $push: "$user_id" }, 
       count: { $sum: 1 } 
        } 
     } 
    ]) 
Verwandte Themen