这种情况非常简单,如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并得以幸存?
答案 0 :(得分:1)
尝试一下。
{“ CacheTime”:{$ gt:ISODate(“ @ {adddays(utcnow(),-5)}”)}}}