【问题标题】:Azure Data Factory - filter Mongodb source dataset by dateAzure 数据工厂 - 按日期筛选 Mongodb 源数据集
【发布时间】: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


    【解决方案1】:

    试试这个。

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

    【讨论】:

    • 它看起来更像是评论而不是答案。请根据how to answer指南更新您的答案
    猜你喜欢
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多