按数组中的字段查询文档

时间:2012-01-07 19:38:15

标签: mongodb

在MongoDB中,我有一组称为“客户”的文档,其中每个文档的结构大致如下。请注意,TimeStamp是DateTime:

{
  "Sessions": [
    {
      "SessionId": "pojiu5iprr2xw5ucsudyrkpv",
      "LocationId": {
        "$oid": "4de4590bfcee1a1b44165e2b"
      },
      "Timestamp": "Wed, 01 Jun 2011 09:39:26 GMT -04:00"
    }
  ],
  "_id": {
    "$oid": "4de6410efcee1a1204a3326c"
  }
}

我希望能够查询“所有在过去24小时内至少有一个带有时间戳的会话的客户”。如果不采用完整的M / R扫描,这是否可行?我也会接受带有静态定义日期的答案,例如“所有至少有一个会话的时间戳晚于1/5/2012的客户”

1 个答案:

答案 0 :(得分:1)

如何在“最近会话时间”的主文档中添加字段。

<强>更新 好的,这是你可以在不添加新字段/索引的情况下完成的:

db.clients.find(
   { "Sessions" : 
      { $elemMatch : 
         { Timestamp : { $gt : new Date(new Date() - 86400000) } } 
      } 
   } 
);

单行代码相同:

db.clients.find({ "Sessions" : { $elemMatch : { Timestamp : { $gt : new Date(new Date() - 86400000) } } } } );

86400000是一天中的毫秒数。