2016-04-05 8 views
1

Gruppierung Ich verwende mongodb mit der Kollektion ProbeMongoDB erhalten verschiedene Artikel nach

{ 
    "_id" : ObjectId("5703750ca9c436386c4814c9"), 
    "user_id" : NumberLong(17), 
    "activitytype_id" : NumberLong(1), 
    "created_date" : ISODate("2015-10-03T03:52:03.000Z") 
}, 
{ 
    "_id" : ObjectId("5703750ca9c436386c4814ca"), 
    "s_id" : NumberLong(132919), 
    "user_id" : NumberLong(17), 
    "activitytype_id" : NumberLong(4), 
    "created_date" : ISODate("2016-03-18T17:13:43.000Z") 
}, 
{ 
    "_id" : ObjectId("5703750ca9c436386c4814cb"), 
    "s_id" : NumberLong(215283), 
    "user_id" : NumberLong(17), 
    "activitytype_id" : NumberLong(4), 
    "created_date" : ISODate("2015-10-03T04:12:33.000Z") 
} 
, 
{ 
    "_id" : ObjectId("5703750ca9c436386c4814cc"), 
    "s_id" : NumberLong(360888), 
    "user_id" : NumberLong(17), 
    "activitytype_id" : NumberLong(4), 
    "created_date" : ISODate("2015-10-03T04:12:41.000Z") 
} 

Dies ist meine Aggregation Pipeline

db.activitylogs.aggregate([ 
    { $group: { 
     _id: { 
      user_id: "$user_id", 
      activitytype_id: "$activitytype_id" 
     }, 
     activity_log_docs: { 
      $addToSet: { 
       s_id: "$s_id", 
       friend_id: "$friend_id",       
       playlist_id: "$playlist_id", 
       created_date:"$created_date" 
      } 
     }    
    }}, 
]) 

ich verschiedene s_id in activity_log_docs bekommen müssen.

hier ist ein Screenshot für das Ergebnis, screen shot for the result

ich brauche duplizierten s_id in activity_log_docs Array zu vermeiden, so dass ich wie diese deutliche s_id

+0

hast du irgendwas probiert? – Burki

+0

Was ist Ihre erwartete Ausgabe? – styvane

+0

Da Sie bei bestimmten Schlüsseln gruppieren, ist der Inhalt des anderen Dokuments wirklich "ungültig", da es natürlich "mehrere Werte" für diese anderen Schlüssel gibt. Verwenden Sie Operatoren wie ['$ first '] (https://docs.mongodb.org/manual/reference/operator/aggregation/first/), um stattdessen" eins "der Werte pro Schlüssel zu erhalten. –

Antwort

0

Ich denke, etwas tun sollten, bekommen:

db.activitylogs.aggregate([ 
    { $group: { 
     _id: { 
      user_id: "$user_id", 
      activitytype_id: "$activitytype_id" , 
      s_id:"$s_id" 
     }, 
     friend_id: {$first:"$friend_id"}}}, 
     playlist_id: {$first:"$playlist_id"}}}, 
     created_date: {$first:"$created_date"}}}, 
    { $group: { 
     _id: { 
      user_id: "$_id.user_id", 
      activitytype_id: "$_id.activitytype_id" 
     }, 
     activity_log_docs: { 
      $addToSet: { 
       s_id: "$_id.s_id", 
       friend_id: "$friend_id",       
       playlist_id: "$playlist_id", 
       created_date:"$created_date" 
      } 
     }    
    }}, 
]) 

Aber bitte überprüfen Sie den Namen Ihres eigenen Feldes.

Verwandte Themen