0

我正在尋找mongo聚合代碼示例,該示例通過一對字段查詢集合和組中的多個字段。我的收藏:spark-scala-mongo-aggregate:查詢多個字段並按2個字段分組

events: 
{ 
_id 
prodId: 
location: 
status: 
user: 
date: 
} 

上面的集合非常扁平。使用嵌套$group$match或任何其他聚合階段..

任何建議或幫助是極大的讚賞

For status "Completed" (This is a $match condition) 

    {Product: abc 
     {Location: US 
      {user, date} 
      {user, date 
      {user, date} 
      .......} 
     {Location: APAC 
      {user, date} 
      {user, date 
      {user, date} 
      .......}} 
    {Product: XYZ 
     {Location: US 
      {user, date} 
      {user, date 
      {user, date} 
      .......} 
     {Location: APAC 
      {user, date} 
      {user, date 
      {user, date} 
      .......}} 
    ........ 

我們如何在聚合框架寫:我在尋找類似的結果下面。謝謝。

回答

1

很多試錯之後,我能解決這個在一定程度上。雖然,這不是我正在尋找的,但這是更好的。這是我得到的。

{ 
     "_id" : { 
       "Product" : "ABC", 
       "location" : "ERU" 
     }, 
     "details" : [ 
       { //Each of this is a unique combination 
         "user" : "XXXX", 
         "date" : ISODate("2015-08-01T09:08:15Z") 
       }, 
       { 
         "user" : "xxxx", 
         "date" : ISODate("2015-08-01T09:03:08Z") 
       }, 
       { 
         "user" : "xxxx", 
         "date" : ISODate("2015-07-20T19:33:57Z") 
       }, 
       { 
         "user" : "xxxx", 
         "date" : ISODate("2015-07-20T19:28:50Z") 
       } 
     ], 
     "count" : 4 
} 
{ 
     "_id" : { 
       "Product" : "AAA", 
       "location" : "US" 
     }, 
     "details" : [ 
       { 
         "user" : "XXXX", 
         "date" : ISODate("2015-08-01T09:08:15Z") 
       }, 
       { 
         "user" : "xxxx", 
         "date" : ISODate("2015-08-01T09:03:08Z") 
       }, 
       { 
         "user" : "xxxx", 
         "date" : ISODate("2015-07-20T19:33:57Z") 
       }, 
       { 
         "user" : "xxxx", 
         "date" : ISODate("2015-07-20T19:28:50Z") 
       } 
     ], 
     "count" : 4 
} 

我的聚合代碼:

db.events.aggregate([ 
{$project: 
    { 
     ProdId:1, 
     location:1, 
     username:1, 
     status:1, 
     dateTime:1 
    } 
    } 
, {$group: 
    { 
     _id: {Product: "$prodId", location: "$location"}, 
     details: {$addToSet: {user: "$username", date: "$dateTime"}}, 
     count: {$sum: 1} 
    }} 
],{allowDiskUse: true} 
) 

希望這有助於。謝謝。

1

使用組有多個領域是:

db.collection.aggregate([{$group: {attr1:'$attr1', attr2:'$attr2'}}]) 
+0

卡米爾:謝謝你回到我身邊。我已經用更真實的收藏領域編輯了我的帖子,以及我需要實現的內容。我正在尋找聚合代碼。目前我已經得到了這個。我現在將位置限制在美國以減少數據集。 'db.events.aggregate([ {$比賽:{$和:[{ 位置: '美國'},{ 狀態: '端'},{ PRODID:{$ NE:空}},{ 用戶:{$ NE:空}} ]}} ,{$組: \t { \t \t _id: 「$ PRODID」, \t \t用戶:{$推: 「$用戶」} \t}} , \t {$ out:「eventProdUsersAgg」} ],{allowDiskUse:true} )'。但這只是給我一個產品的用戶集合。 – Vamsi

+0

如何更改此位置以獲取位置和日期以及我在帖子中提到的格式? – Vamsi