2017-01-18 93 views
1

在這裏,我們有以下查詢:問題與聚集查詢

db.getCollection('triggered_policies').aggregate(
[{ "$match" : { "policy_name" : "EIQSVCFG-2111-Spam Activity"}}, 
{ "$project" : { "cust_created_at" : { "$add" : [ "$created_at" , 19800000]} , "event_ids" : "$event_ids" , "trigger_time" : "$trigger_time" , "created_at" : "$created_at" , "triggered_rules" : "$triggered_rules"}}, 
{ "$sort" : { "created_at" : -1}}, 
{ "$group" : 
    { "_id" : 
     { 
      "$hour" : "$cust_created_at"} , 
      "triggered_policies" : { "$addToSet" : { "trigger_time" : "$trigger_time" , "created_at" : "$created_at" , "event_ids" : "$event_ids" , "triggered_rules" : "$triggered_rules"} 
     } 
    } 
}, 
{ "$sort" : { "_id" : 1}} 
]) 

上述查詢的輸出繼電器是:

{ 
    "_id" : 11, 
    "triggered_policies" : [ 
     { 
      "trigger_time" : NumberLong(1484633489000), 
      "created_at" : ISODate("2017-01-17T06:11:05.452Z"), 
      "event_ids" : [ 
       "000159ab0c6c3c722f6249", 
       "000159ab0c6c3b722f624a" 
      ], 
      "triggered_rules" : [ 
       { 
        "policy_rule" : ObjectId("58776ea2a7c5541661c0424c"), 
        "trigger_time" : NumberLong(1484633489000), 
        "event_ids" : [ 
         "000159ab0c6c3c722f6249", 
         "000159ab0c6c3b722f624a" 
        ] 
       } 
      ] 
     }, 
     { 
      "trigger_time" : NumberLong(1484633489000), 
      "created_at" : ISODate("2017-01-17T06:11:05.453Z"), 
      "event_ids" : [ 
       "000159ab0c6c3c722f6249", 
       "000159ab0c6c3b722f624a" 
      ], 
      "triggered_rules" : [ 
       { 
        "policy_rule" : ObjectId("58776ea2a7c5541661c0424c"), 
        "trigger_time" : NumberLong(1484633489000), 
        "event_ids" : [ 
         "000159ab0c6c3c722f6249", 
         "000159ab0c6c3b722f624a" 
        ] 
       } 
      ] 
     }, 
     { 
      "trigger_time" : NumberLong(1484633489000), 
      "created_at" : ISODate("2017-01-17T06:11:05.454Z"), 
      "event_ids" : [ 
       "000159ab0c6c3c722f6248", 
       "000159ab0c6c3b722f624b" 
      ], 
      "triggered_rules" : [ 
       { 
        "policy_rule" : ObjectId("58776ea2a7c5541661c0424c"), 
        "trigger_time" : NumberLong(1484633489000), 
        "event_ids" : [ 
         "000159ab0c6c3c722f6248", 
         "000159ab0c6c3b722f624b" 
        ] 
       } 
      ] 
     } 
    ] 
} 

但我們期待的是:

在上面查詢我們刪除了以下字段組合的重複值:

- trigger_time 
- created_at 
- event_ids 
- triggered_rules 

但是,我們需要有以下三個方面的獨特價值:

- trigger_time 
- event_ids 
- triggered_rules 

而且第一created_at字段的字段值。

即有望走出看跌連接在下面的圖片:enter image description here

請幫助我們得到查詢(將提供輸入數據也如果你想)。

我輸入的是:

{ 
    "_id" : ObjectId("587db579a7c554598e3bb56e"), 
    "policy_name" : "EIQSVCFG-2111-Spam Activity", 
    "event_ids" : [ 
     "000159ab0c6c3c722f6249", 
     "000159ab0c6c3b722f624a" 
    ], 
    "trigger_time" : NumberLong(1484633489000), 
    "created_at" : ISODate("2017-01-17T06:11:05.452Z"), 
    "triggered_rules" : [ 
     { 
      "policy_rule" : ObjectId("58776ea2a7c5541661c0424c"), 
      "trigger_time" : NumberLong(1484633489000), 
      "event_ids" : [ 
       "000159ab0c6c3c722f6249", 
       "000159ab0c6c3b722f624a" 
      ] 
     } 
    ] 
} 


{ 
    "_id" : ObjectId("587f0801a34837e4ff3c5deb"), 
    "policy_name" : "EIQSVCFG-2111-Spam Activity", 
    "event_ids" : [ 
     "000159ab0c6c3c722f6249", 
     "000159ab0c6c3b722f624a" 
    ], 
    "trigger_time" : NumberLong(1484633489000), 
    "created_at" : ISODate("2017-01-17T06:11:05.452Z"), 
    "triggered_rules" : [ 
     { 
      "policy_rule" : ObjectId("58776ea2a7c5541661c0424c"), 
      "trigger_time" : NumberLong(1484633489000), 
      "event_ids" : [ 
       "000159ab0c6c3c722f6249", 
       "000159ab0c6c3b722f624a" 
      ] 
     } 
    ] 
} 


{ 
    "_id" : ObjectId("587f0807a34837e4ff3c5dec"), 
    "policy_name" : "EIQSVCFG-2111-Spam Activity", 
    "event_ids" : [ 
     "000159ab0c6c3c722f6249", 
     "000159ab0c6c3b722f624a" 
    ], 
    "trigger_time" : NumberLong(1484633489000), 
    "created_at" : ISODate("2017-01-17T06:11:05.452Z"), 
    "triggered_rules" : [ 
     { 
      "policy_rule" : ObjectId("58776ea2a7c5541661c0424c"), 
      "trigger_time" : NumberLong(1484633489000), 
      "event_ids" : [ 
       "000159ab0c6c3c722f6249", 
       "000159ab0c6c3b722f624a" 
      ] 
     } 
    ] 
} 


{ 
    "_id" : ObjectId("587f0811a34837e4ff3c5ded"), 
    "policy_name" : "EIQSVCFG-2111-Spam Activity", 
    "event_ids" : [ 
     "000159ab0c6c3c722f6249", 
     "000159ab0c6c3b722f624a" 
    ], 
    "trigger_time" : NumberLong(1484633489000), 
    "created_at" : ISODate("2017-01-17T06:11:05.452Z"), 
    "triggered_rules" : [ 
     { 
      "policy_rule" : ObjectId("58776ea2a7c5541661c0424c"), 
      "trigger_time" : NumberLong(1484633489000), 
      "event_ids" : [ 
       "000159ab0c6c3c722f6249", 
       "000159ab0c6c3b722f624a" 
      ] 
     } 
    ] 
} 


{ 
    "_id" : ObjectId("587f0861a34837e4ff3c5dee"), 
    "policy_name" : "EIQSVCFG-2111-Spam Activity", 
    "event_ids" : [ 
     "000159ab0c6c3c722f6249", 
     "000159ab0c6c3b722f624a" 
    ], 
    "trigger_time" : NumberLong(1484633489000), 
    "created_at" : ISODate("2017-01-17T06:11:05.453Z"), 
    "triggered_rules" : [ 
     { 
      "policy_rule" : ObjectId("58776ea2a7c5541661c0424c"), 
      "trigger_time" : NumberLong(1484633489000), 
      "event_ids" : [ 
       "000159ab0c6c3c722f6249", 
       "000159ab0c6c3b722f624a" 
      ] 
     } 
    ] 
} 


{ 
    "_id" : ObjectId("587f2932a34837e4ff3c5def"), 
    "policy_name" : "EIQSVCFG-2111-Spam Activity", 
    "event_ids" : [ 
     "000159ab0c6c3c722f6248", 
     "000159ab0c6c3b722f624b" 
    ], 
    "trigger_time" : NumberLong(1484633489000), 
    "created_at" : ISODate("2017-01-17T06:11:05.454Z"), 
    "triggered_rules" : [ 
     { 
      "policy_rule" : ObjectId("58776ea2a7c5541661c0424c"), 
      "trigger_time" : NumberLong(1484633489000), 
      "event_ids" : [ 
       "000159ab0c6c3c722f6248", 
       "000159ab0c6c3b722f624b" 
      ] 
     } 
    ] 
} 

和預期的出將是:

{ 
    "_id" : 11, 
    "triggered_policies" : [ 
     { 
      "trigger_time" : NumberLong(1484633489000), 
      "created_at" : ISODate("2017-01-17T06:11:05.452Z"), 
      "event_ids" : [ 
       "000159ab0c6c3c722f6249", 
       "000159ab0c6c3b722f624a" 
      ], 
      "triggered_rules" : [ 
       { 
        "policy_rule" : ObjectId("58776ea2a7c5541661c0424c"), 
        "trigger_time" : NumberLong(1484633489000), 
        "event_ids" : [ 
         "000159ab0c6c3c722f6249", 
         "000159ab0c6c3b722f624a" 
        ] 
       } 
      ] 
     }, 
     { 
      "trigger_time" : NumberLong(1484633489000), 
      "created_at" : ISODate("2017-01-17T06:11:05.454Z"), 
      "event_ids" : [ 
       "000159ab0c6c3c722f6248", 
       "000159ab0c6c3b722f624b" 
      ], 
      "triggered_rules" : [ 
       { 
        "policy_rule" : ObjectId("58776ea2a7c5541661c0424c"), 
        "trigger_time" : NumberLong(1484633489000), 
        "event_ids" : [ 
         "000159ab0c6c3c722f6248", 
         "000159ab0c6c3b722f624b" 
        ] 
       } 
      ] 
     } 
    ] 
} 
+0

避免張貼代碼的圖像,這是不鼓勵在計算器上 – chridam

+0

我已經編輯我的答案和查詢,以及。您可以再次嘗試聚合查詢,但請注意,您提供的輸出具有相同的'trigger_time'字段。 – Karlen

回答

0

編輯

您提供的輸出還不能滿足你需求的,因爲trigger_time場兩份文件都是一樣的,而你要求它們是獨一無二的。 因此,以下聚合滿足您提供的要求。

db.getCollection('triggered_policies').aggregate([ 
    { $match : { "policy_name" : "EIQSVCFG-2111-Spam Activity"}}, 
    { $project : { created_at : { $add : [ "$created_at" , 19800000]}, triggered_rules:1, trigger_time:1, event_ids:1}}, 

    { $sort : { "created_at" : -1}}, 
    { $unwind:"$triggered_rules"}, //this will unwind the array of triggered_rules 
    { $group:{_id:"$triggered_rules", created_at: {$first: "$created_at"}, event_ids: {$first: "$event_ids"}, trigger_time: {$first: "$trigger_time"}}}, //this will give unique triggered_rules 
    { $project : { created_at : 1, triggered_rules:"$_id", trigger_time:1, event_ids:1}}, 

    { $group:{_id:"$event_ids", created_at: {$first: "$created_at"}, trigger_time: {$first: "$trigger_time"}, triggered_rules: {$first: "$triggered_rules"}}}, //will give unique event_ids field 
    { $project : { created_at : 1, triggered_rules:1, trigger_time:1, event_ids:"$_id"}}, 

    //and finally making unique created_at and trigger_time fileds 
    { $group:{_id:"$created_at", trigger_time: {$first: "$trigger_time"}, event_ids: {$first: "$event_ids"}, triggered_rules: {$first: "$triggered_rules"}}}, //this will give you unique created_at fields 
    { $project : { created_at : "$_id", triggered_rules:1, trigger_time:1, event_ids:1}}, 
    { $group:{_id:"$trigger_time", created_at: {$first: "$created_at"}, event_ids: {$first: "$event_ids"}, triggered_rules: {$first: "$triggered_rules"}}}, //and this will give you unique trigger_time fields  
    { $project : { created_at : 1, triggered_rules:1, trigger_time:"$_id", event_ids:1}}, 

]) 

根據您提供的輸入這給了我下面的輸出:

{ 
"_id" : NumberLong("1484633489000"), 
"created_at" : ISODate("2017-01-17T11:41:05.453Z"), 
"event_ids" : [ 
    "000159ab0c6c3c722f6249", 
    "000159ab0c6c3b722f624a" 
], 
"triggered_rules" : { 
    "policy_rule" : ObjectId("58776ea2a7c5541661c0424c"), 
    "trigger_time" : NumberLong("1484633489000"), 
    "event_ids" : [ 
     "000159ab0c6c3c722f6249", 
     "000159ab0c6c3b722f624a" 
    ] 
}, 
"trigger_time" : NumberLong("1484633489000") 
} 
+0

謝謝Karlen您的快速回復, 不好意思說這是錯誤的輸出。 問候, Jagadeesh穆罕默姆 –

+0

可以提供輸入文件,這將有助於給出更好的答案?超過5個文檔將不勝感激 – Karlen

+0

在第一條評論中更新了輸入和預期輸出。 –