首页 > 解决方案 > 如何在聚合管道的 $match 块中使用 $$NOW

问题描述

给定一个添加到集合“样本”的文档,如下所示:

db.sample.insert({"activeOn":ISODate("2000-01-01")})

我认为我应该能够将该文档与以下聚合相匹配

db.sample.aggregate([{"$match":{"activeOn":{"$lte":"$$NOW"}}}])

但没有找到文件。我正在使用 MongoDB 版本 4.2.3

在 $match 块中使用 $$NOW 系统变量我错过了什么?

标签: mongodbmongodb-query

解决方案


来自$match文档:

$match 查询语法与读操作查询语法相同;即 $match 不接受原始聚合表达式。要在 $match 中包含聚合表达式,请使用 $expr 查询表达式:

$$ NOW原始聚合表达式吗?是的,因为它是一个系统变量:

表达式可以包括字段路径、文字、系统变量、表达式对象和表达式运算符。表达式可以嵌套。

所以我们所要做的就是像这样使用$expr

db.sample.aggregate([
  {
    "$match": {
      $expr: {
        $lte: [
          "$activeOn",
          "$$NOW"
        ]
      }
    }
  }
])

蒙戈游乐场


推荐阅读