стадия в конвейере агрегации, а также где вы всегда ожидаете, что «последняя» запись будет последней добавленной в массив, которую вы всегда можете «предварительно ожидать», используя

я есть запрос, который позволяет пользователю фильтровать по некоторому строковому полю, используя формат, который выглядит следующим образом:«Где описание последней инспекции является одним из:foo или жеbar", Это прекрасно работает со следующим запросом:

db.getCollection('permits').find({
  '$expr': {
    '$let': {
      vars: {
        latestInspection: {
          '$arrayElemAt': ['$inspections', {
            '$indexOfArray': ['$inspections.inspectionDate', {
              '$max': '$inspections.inspectionDate'
            }]
          }]
        }
      },
      in: {
        '$in': ['$latestInspection.description', ['Fire inspection on property', 'Health inspection']]
      }
    }
  }
})

Я хочу, чтобы пользователь мог использовать подстановочные знаки, которые я превращаю в регулярные выражения:«Где описание последней инспекции является одним из:Health inspection или жеFound a * at the property".

Регулярное выражение, которое я получаю, не нуждается в помощи с этим. Проблема, с которой я сталкиваюсь, по-видимому,агрегация$in оператор не поддерживает сопоставление по регулярным выражениям, Так что я думал, что построю это, используя$or так как документыне скажу, что я не могу использовать регулярные выражения. Это была моя лучшая попытка:

db.getCollection('permits').find({
  '$expr': {
    '$let': {
      vars: {
        latestInspection: {
          '$arrayElemAt': ['$inspections', {
            '$indexOfArray': ['$inspections.inspectionDate', {
              '$max': '$inspections.inspectionDate'
            }]
          }]
        }
      },
      in: {
        '$or': [{
          '$latestInspection.description': {
            '$regex': /^Found a .* at the property$/
          }
        }, {
          '$latestInspection.description': 'Health inspection'
        }]
      }
    }
  }
})

За исключением того, что я получаю ошибку:

"Unrecognized expression '$latestInspection.description'"

Я думаю, что я не могу использовать$$latestInspection.description как ключ объекта, но я не уверен (мои знания здесь ограничены), и я не могу найти другой способ сделать то, что я хочу. Итак, вы видите, что я даже не смог пройти достаточно далеко, чтобы посмотреть, смогу ли я использовать$regex в$or, Я ценю всю помощь, которую я могу получить.

Ответы на вопрос(1)

Ваш ответ на вопрос