在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的客户”
答案 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是一天中的毫秒数。