如何从perl和mongoDB中的ISODate()中减去分钟?

时间:2019-01-28 14:42:54

标签: mongodb perl aggregate fastcgi

实际上,我想从执行时间字段中减去分钟(减去5分钟)... 这是我的mongodb集合:

{
    "_id" : ObjectId("5c4f11fae2fb4adc98f323ad"),
    "datetime" : ISODate("2019-01-28T14:30:18.423Z"),
    "queuename" : "indotama_advice",
    "payload" : "xxxxxxx",
    "executiontime" : ISODate("2019-01-28T14:31:18.423Z")
}

这是我的代码:

my $collection = $db->get_collection('schedulequeue');
$person =  $collection->find_one({"queuename" => "indotama_advice"},{"executiontime"=>1,"_id"=>0});
my $new_data = $collection->aggregate([
        {'$subtract' => ["executiontime", 5 * 60 * 1000]}
]);

但是我收到错误消息unrecognized pipeline stage name : $subtract,有人可以告诉我在perl中使用$ subtract的正确方法吗?

1 个答案:

答案 0 :(得分:0)

正如错误明确指出的那样,$sql = @" DECLARE @Tables CURSOR; DECLARE @TableName NVARCHAR(200); BEGIN SET @Tables = CURSOR FOR SELECT TABLE_NAME FROM test.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME LIKE 'x%' OPEN @Tables FETCH NEXT FROM @Tables INTO @TableName WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'SELECT TOP 1 * FROM test.dbo.' + @TableName FETCH NEXT FROM @Tables INTO @TableName END; CLOSE @Tables ; DEALLOCATE @Tables; END; "@ $ps = [PowerShell]::Create() $ps.AddCommand("Invoke-Sqlcmd").AddParameter("Query", $sql).AddParameter("Verbose") $ps.Invoke() $sqlOutput = $ps.Streams.Verbose $sqlOutputToRun = $nul $sqlOutput | foreach { $sqlOutputToRun += ($_.ToString() + "`n") } $sqlOutputToRun = @" $sqlOutputToRun "@ $sqlOutputToRun 不是聚合管道阶段。使用$subtract来转换查询结果:

$project