Как использовать $$ NOW в блоке $ match конвейера агрегации - PullRequest
1 голос
/ 17 июня 2020

Учитывая документ, добавленный в коллекцию «образец» следующим образом:

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

Я думаю, что смогу сопоставить этот документ со следующей агрегацией

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

, но документов не найдено. Я использую MongoDB версии 4.2.3

Что мне не хватает в использовании системной переменной $$ NOW в блоке $ match?

1 Ответ

3 голосов
/ 17 июня 2020

Из $ match docs:

Синтаксис запроса $ match идентичен синтаксису запроса операции чтения; т.е. $ match не принимает необработанные выражения агрегирования. Чтобы включить выражение агрегирования в $ match, используйте выражение запроса $ expr:

Is $$ NOW a сырые выражения агрегирования ? да, так как это системная переменная:

Выражения могут включать пути к полям, литералы, системные переменные, объекты выражений и операторы выражений. Выражения могут быть вложенными.

Итак, все, что нам нужно сделать, это использовать $ expr вот так:

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

Mon go Playground

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...