2017-01-18 92 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

在第一条评论中更新了输入和预期输出。 –