【发布时间】:2020-03-11 12:42:04
【问题描述】:
此方案非常简单,如 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)}}' 无效。 .活动 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)}}'是无效的。 .活动 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 并幸存下来?
【问题讨论】:
标签: mongodb filter azure-data-factory azure-data-factory-2