我有一个应用程序,我需要能够通过 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")
}
最佳答案
与大多数语言实现一样,您对语言实现使用 native “日期”类型而不是字符串。 MongoDB 将日期 (ISODate
) 存储为日期类型将被序列化为的实际 BSON 表示(实际上是时间戳)。
MongoDB Perl 驱动程序支持 DateTime和 DateTime::Tiny用于序列化和反序列化:
my $cursor = $matches->find({
last_seen => {
'$gte' => DateTime->new( year => 2014, month => 5, day => 15 )
}
}
或者您将实际获取用于比较的日期对象。
参见 Dates在Data Types文档部分以获取更多信息。
关于perl - perl查询ISODate时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23709428/