Skip to main content
Luw
Gold ⭐️
June 18, 2021
Solved

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

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

Luw
LuwAnswer
Gold ⭐️
June 18, 2021

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
}
}
]

 

1 reply

Luw
LuwAuthorAnswer
Gold ⭐️
June 18, 2021

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
}
}
]

 

Translate