Como usar $ regex dentro de $ ou como uma expressão de agregação
Eu tenho uma consulta que permite ao usuário filtrar por algum campo de seqüência de caracteres usando um formato que se parece com:"Onde a descrição da última inspeção é:foo
oubar
". Isso funciona muito bem com a seguinte 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']]
}
}
}
})
O que eu quero é que o usuário possa usar caracteres curinga que eu me transformo em expressões regulares:"Onde a descrição da última inspeção é:Health inspection
ouFound a * at the property
".
O regex que recebo, não precisa de ajuda com isso. O problema que estou enfrentando é, aparentementea agregação$in
O operador não suporta correspondência por expressões regulares. Então pensei em construir isso usando$or
desde os documentosnão diga que não posso usar regex. Esta foi a minha melhor tentativa:
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'
}]
}
}
}
})
Exceto que estou recebendo o erro:
"Unrecognized expression '$latestInspection.description'"
Estou pensando que não posso usar$$latestInspection.description
como chave de objeto, mas não tenho certeza (meu conhecimento aqui é limitado) e não consigo descobrir outra maneira de fazer o que quero. Então você vê que eu nem fui capaz de chegar longe o suficiente para ver se posso usar$regex
no$or
. Agradeço toda a ajuda que posso obter.