此场景非常简单,如 ADFv2 文档和示例中所述,我创建了一个复制管道来从 MongoDB 集合获取数据,并将其写入 Azure SQL 数据库。
完整的收集数据已成功传输,并且所有映射均已正确设置。当我尝试过滤源数据集以仅获取最后一个数据集时,问题就开始了nMongoDB 的天数。我尝试了几个查询,并与 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 并幸存下来?