Support Questions

Find answers, ask questions, and share your expertise

NiFi RunMongoAggreation - How to get all documents within a time range?

avatar
New Contributor

I am trying to get all documents within a time range using RunMongoAggreation.

In console I tried with below query and it worked fine.

aggregate([
{
"$match": {
"modified_at": {
"$gte": ISODate("2017-02-08T12:10:40.787")
}
}
}
])

Flowfile has below properties

startTimestamp: 2017-02-08T12:10:40.787

Below is the query being used in RunMongoAggreation

[
{
"$match": {
"modified_at": {
"$gte": "${startTimestamp}"
}
}
}
]

Its not return result

1 ACCEPTED SOLUTION

avatar
New Contributor

Im convert match field to timestamp then compare. Resolved

[
    {
        "$addFields": {
            "timestamp": {
                "$toLong": "$modified_at"
            }
        }
    },
    {
        "$match": {
                "timestamp": {
                    "$gte": ${stored.state:toDate("yyyy-MM-dd HH:mm:ss"):toNumber()}
                },
                "timestamp": {
                    "$gte": ${current.state:toDate("yyyy-MM-dd HH:mm:ss"):toNumber()}
                }
         }
    },
    {
        "$skip": ${offset}
    },
    {
        "$limit": ${limit}
    },
    {
        "$project": {
            "code": 1
        }
    }
]

 

View solution in original post

1 REPLY 1

avatar
New Contributor

Im convert match field to timestamp then compare. Resolved

[
    {
        "$addFields": {
            "timestamp": {
                "$toLong": "$modified_at"
            }
        }
    },
    {
        "$match": {
                "timestamp": {
                    "$gte": ${stored.state:toDate("yyyy-MM-dd HH:mm:ss"):toNumber()}
                },
                "timestamp": {
                    "$gte": ${current.state:toDate("yyyy-MM-dd HH:mm:ss"):toNumber()}
                }
         }
    },
    {
        "$skip": ${offset}
    },
    {
        "$limit": ${limit}
    },
    {
        "$project": {
            "code": 1
        }
    }
]