2014-10-08 109 views
0

我有一个蒙戈DOC如下:MongoDB的过滤结果集

{ 
_id: "fe50fdee-4ea3-4824-94af-f369633c0c7a", 
_class: "com.tracking.daoservice.model.TrackingData", 
modified: ISODate("2014-09-10T23:38:48.407Z"), 
eventtype: "William-Test", 
eventdata: { 
    QueryDate: "01-APR-2014", 
    SearchQuery: { 
     keyword: "Java", 
     location: "Santa Clara, CA", 
     Facet: "skill~java~perl|workAuth~USC", 
     SearchAgentId: "4299" 
    }, 
    Viewed: [ 
     { 
      ViewedID: "8992ade400a", 
      Dockey: "3323aba3233", 
      PID: "32399a", 
      actionsTaken: "email|direct message|report seeker", 
      viewDate: "01-APR-2014", 
      MessageSent: "true", 
      Message: [ 
       { 
        MessageID: "123aca323", 
        Delivered: "True", 
        Opened: "True", 
        ClickThroughRate: "NotBad", 
        MessageDate: "02-APR-2014", 
        Response: [ 
         { 
          ResponseId: "a323a9da", 
          ResponseDate: "23-APR-2014" 
         } 
        ] 
       } 
      ] 
     } 
    ] 
}, 
eventsource: "API-Dev Test - JMachine", 
sourceip: "myIp", 
entityid: "TmoneyBunnyWunny", 
groupid: "Dice", 
datecreated: ISODate("2014-09-10T23:38:48.405Z") 
} 

我对MongoDB的查询返回文档的列表集ID

db.TRACKING_DATA.find({'eventdata.Viewed.Dockey': { $in: ['f7a16badfe6d2729449426ede1d7c558','3ede6f9f94df51bbf97fd9adf566f9d6','34508d254bb3393f52432963426eddc6','591297e6dc75af5aa43581ac66463562','c9fdf22ee4aef3e2f06a624cbafe01ec','b01cbe04b1c7b760b1ac50a953b182dd','e38d86d02a29730be5c7f18c16406fdd','2145ff57990a4d566dae99de05746536','febb0b44f6f481934e8c53a2c603b8a8','30d2ce2934ccbddcd78a16ea1b102765']}, 'entityid': '1026891'}) 

的但它返回的所有实例这些对于每个Dockey来说,但是我只想为每个Dockey返回一个最近的值,这可以从datecreated属性中看出,有没有一种方法可以过滤查询中的数据以仅返回该值,即内部查询这只会为每个Dockey带来最新的文档。

回答

0

用户聚合管道:

db.TRACKING_DATA.aggregate([ 
    { 
     $match : { 
      'eventdata.Viewed.Dockey' : { 
       $in : [ 'f7a16badfe6d2729449426ede1d7c558', 
         '3ede6f9f94df51bbf97fd9adf566f9d6', 
         '34508d254bb3393f52432963426eddc6', 
         '591297e6dc75af5aa43581ac66463562', 
         'c9fdf22ee4aef3e2f06a624cbafe01ec', 
         'b01cbe04b1c7b760b1ac50a953b182dd', 
         'e38d86d02a29730be5c7f18c16406fdd', 
         '2145ff57990a4d566dae99de05746536', 
         'febb0b44f6f481934e8c53a2c603b8a8', 
         '30d2ce2934ccbddcd78a16ea1b102765' ] 
      }, 
      'entityid' : '1026891' 
     } 
    }, { 
     $sort : { 
      datecreated : -1 
     } 
    }, { 
     $group : { 
      _id : "$_id", 
      doc : { 
       $first : "$$ROOT" // this is whole document for each 
            // docKey with latest "datecreated" 
      } 
     } 
    } ]);