Azure 数据工厂 - 按日期筛选 Mongodb 个源数据集

Azure Data Factory - filter Mongodb source dataset by date

这个场景非常简单,如 ADFv2 文档和示例中所述,我创建了一个复制管道以从 MongoDB 集合中获取数据,并将其写入 Azure SQL 数据库.

全集数据传输成功,所有映射设置正确。当我尝试过滤源数据集以仅从 MongoDB 获取最后 n 天时,问题就开始了。我已经尝试了几个查询,并与 MongoDB Compass 进行了交叉检查,以查看它们是否确实在执行 Mongo 方面,它们确实如此。 它归结为这个过滤器查询:

{"CacheTime": {$gt: new Date(ISODate().getTime()-1000*60*60*24*5)}}

在 MongoDB 上成功执行,但在 ADF 上失败并出现错误:

属性值'{"CacheTime":{$gt:new Date(ISODate().getTime()-1000*60*60*24*5) }}' 是无效的。 . Activity ID: xxxxx

所以我尝试使用 ADF 动态内容以 ISODate 格式设置当前日期并将整个过滤器作为字符串传递:

@concat('{"CacheTime": {$gt: ISODate("',formatDateTime(utcnow(),'yyyy-MM-ddThh:mm:ssZ'),'")}}')

这个失败并出现类似的错误:

属性值'{"CacheTime":{$gt:new Date(ISODate("2019-11-15T10:45:16Z")-1000*60 *60*24*2)}}'无效。 . Activity ID: xxxxx

属性 值本身 ({"CacheTime": {$gt: new Date(ISODate("2019-11-15T10:45:16Z")-1000*60*60*24 *2)}}) 在 MongoDB 上执行得很好。而且我找不到它在 ADF 上不起作用的原因。 如果这与受支持的 MongoDB 版本有关,请检查 MongoDB 文档。我的 MongoDB 版本是 4.0,但我查询中的函数是简单的日期函数,所以我相信过滤器查询应该不会失败。

有没有人将带有日期的成功查询过滤器传递给 MongoDB 并幸存下来?

试试这个。

{"CacheTime":{$gt: ISODate("@{adddays(utcnow(),-5)}")}}