стадия в конвейере агрегации, а также где вы всегда ожидаете, что «последняя» запись будет последней добавленной в массив, которую вы всегда можете «предварительно ожидать», используя
я есть запрос, который позволяет пользователю фильтровать по некоторому строковому полю, используя формат, который выглядит следующим образом:«Где описание последней инспекции является одним из: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
, Я ценю всю помощь, которую я могу получить.