首页 > 解决方案 > 大于 $gt 的简单 $match 不起作用

问题描述

这是聚合查询的结果,

{
    "_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
}

我想过滤字段lastExecutedTimeFromNow大于frequency. 但它返回 0 个结果。

这是aggregate我正在使用的查询,

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

关于我哪里出错的任何线索或对此的任何帮助真的很棒。

标签: mongodb

解决方案


您可以使用 $expr 但请记住它比正常 $match 慢

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

推荐阅读