Cómo usar $ regex dentro de $ o como una expresión de agregación
Tengo una consulta que permite al usuario filtrar por algún campo de cadena usando un formato que se parece a: "Donde la descripción de la última inspección es cualquiera de:foo
obar
". Esto funciona muy bien con la siguiente consulta:
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']]
}
}
}
})
Lo que quiero es que el usuario pueda usar comodines, que convierto en expresiones regulares: "Donde la descripción de la última inspección es cualquiera de:Health inspection
oFound a * at the property
".
La expresión regular que recibo, no necesito ayuda con eso. El problema que estoy enfrentando es, aparentemente,la agregación$in
l operador @ no admite coincidencias con expresiones regulares. Así que pensé en construir esto usando$or
desde los documentos no decir que no puedo usar expresiones regulares. Este fue mi mejor intento:
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'
}]
}
}
}
})
Excepto que recibo el error:
"Unrecognized expression '$latestInspection.description'"
Estoy pensando que no puedo usar$$latestInspection.description
como clave de objeto, pero no estoy seguro (mi conocimiento aquí es limitado) y no puedo encontrar otra forma de hacer lo que quiero. Así que ya ves, ni siquiera fui capaz de llegar lo suficientemente lejos como para ver si puedo usar$regex
in$or
. Agradezco toda la ayuda que puedo obtener.