0

This is the result of an aggregate query,

{
    "_id" : ObjectId("5dab3240dfbe9a15cd69771d"),
    "isManual" : false,
    "frequency" : 60,
    "lastExecuted" : ISODate("2019-10-21T03:38:15.114Z"),
    "lastExecutedTimeFromNow" : 129.58105
}
{
    "_id" : ObjectId("5dad47c65310a16581cc6294"),
    "isManual" : false,
    "frequency" : 50,
    "lastExecuted" : ISODate("2019-10-25T00:00:00.000Z"),
    "lastExecutedTimeFromNow" : 100
}
{
    "_id" : ObjectId("5dad48a55310a16581cc6332"),
    "isManual" : true,
    "frequency" : 100,
    "lastExecuted" : ISODate("2019-10-23T00:00:00.000Z"),
    "lastExecutedTimeFromNow" : 50
}

I wanted to filter the documents where the field lastExecutedTimeFromNow greater than frequency. But it returns 0 results.

Here's the aggregate query I'm using,

db.getCollection('test').aggregate([
    {
        $match: {
            "lastExecutedTimeFromNow": { $gte: "$frequency" }
        }
    }
])

Any clue on where I'm going wrong or any help on this would really be great.

Stranger
  • 10,332
  • 18
  • 78
  • 115

1 Answers1

2

You can use $expr but keep in mind it's slower than normal $match

db.getCollection('test').aggregate([
  {
    $match: {
      $expr: {
        $gte: [
          "$lastExecutedTimeFromNow",
          "$frequency"
        ]
      }
    }
  }
])
sushant mehta
  • 1,244
  • 1
  • 7
  • 13