我有一个名为 Clickstream 的 MongoDB 集合,并希望在过去 5 天内找到与特定 pubCode 匹配且带有时间戳的所有文档。时间戳位于名为 ts 的字段中,Mongo 数据类型为 Date。
从 Mongo shell 我可以执行以下操作:-
db.Clickstream.find({
pubCode : "w_abc123",
ts: {$gte: ISODate("2014-02-28T00:00:00Z")}
})
但是,我似乎不能在 Perl 中做同样的事情(使用今天的日期,而不是硬编码的日期和时间)。如果我这样做:-
my $now = DateTime->now;
my $n_days_ago = $now->add( days => -5 );
... etc ...
my $ptr = $ptrClickstream->find(
{
pubCode => "$pubCode",
ts => { "\$gte" => ISODate("$n_days_ago") }
},
{ hitType => 1 }
);
我收到以下错误消息:-
在 recalcPubPop.pm 第 25 行调用了未定义的子例程 &main::ISODate。
如果我像这样删除对 ISOData() 的引用
my $ptr = $ptrClickstream->find({
pubCode => "$pubCode", ts => { "\$gte" => "$n_days_ago" }
});
我没有退回任何文件。
有关如何使此 find() 返回 ts 小于 5 天的记录的任何建议?谢谢!