在perl中查询ISODate时间

时间:2014-05-17 08:55:56

标签: perl mongodb

我有一个应用程序,我需要能够通过mongoshell查询以下查询中的日期范围,但我不能在我的生活中通过perl MongoDB驱动程序重现它

db.matches.find({ last_seen: { $gte: new Date("2014-05-15T00:00:00.000Z")}});

我的初始perl查询看起来像(我知道天真)

$matches->find({ last_seen => { '$gte' => "new Date(\"2014-05-15T00:00:00.000Z\")"}});

数据的一个例子是

{
    "_id" : ObjectId("5365e47c183aa8df9dee7558"),
    "count" : NumberLong(21),
    "matches" : [ 
        "Team 2", 
        "Team 2", 
        "Team 2", 
        "Team 1", 
        "Team 1", 
        "Team 1", 
        "Team 2", 
        "Team 1", 
        "Team 1", 
        "Team 2", 
        "Team 1", 
        "Team 2", 
        "Team 1", 
        "Team 1", 
        "Team 1"
    ],
    "player1" : "Team 1",
    "player2" : "Team 2",
    "last_seen" : ISODate("2014-05-17T08:16:05.000Z")
}

1 个答案:

答案 0 :(得分:3)

与大多数语言实现一样,您使用本机" date"类型到您的语言实现而不是字符串。 MongoDB将日期(ISODate)存储为日期类型将被序列化的实际BSON repraesentation(实际上是时间戳)。

Perl的MongoDB驱动程序支持DateTimeDateTime::Tiny进行序列化和反序列化:

my $cursor = $matches->find({
    last_seen => { 
       '$gte' => DateTime->new( year => 2014, month => 5, day => 15 )
    }
}

或者你要实际获得用于比较的日期对象。

有关详细信息,请参阅文档Dates部分中的Data Types