Expresión regular con patrón de variable tomado del valor de un campo [MongoDB]
Digamos que tengo algunos documentos con esta estructura:
[
{
"name": "Nombre1",
"surname": "Apellido1",
"fullName": "Nombre1 Apellido1"
},
{
"name": "Nombre2",
"surname": "Apellido2",
"fullName": "Nombre2 Apellido2"
},
// Me gustaría detectar este en el que el nombre y el nombre dentro de fullName no coinciden
{
"name": "Nombre3",
"surname": "Apellido3",
"fullName": "Nombre1 Apellido3"
}
]
Y fullName
es un campo calculado.
Idealmente, me gustaría detectar los documentos en los que name
no es parte de fullName
. Esto podría suceder debido a una implementación incorrecta de la parte de cálculo.
Esperaría que algo como lo siguiente al menos identifique qué nombres y fullnames realmente coinciden (lo contrario de lo que estoy tratando de hacer):
db.people.find({"fullName": /$name/});
Sin embargo, esto busca $name
y no el valor que el campo name
contiene en el mismo documento. ¿Alguna idea de cómo lograr esto?
Nota: Intento ejecutar esto en DocumentDB (v3.6.0), pero si tienes alguna sugerencia para MongoDB, podría funcionar también.
davy.ai
Para detectar los documentos en los que
name
no forma parte defullName
, puedes utilizar el operador$where
en MongoDB.Aquí tienes una consulta que debería conseguirlo:
Esta consulta utiliza el operador
$where
para ejecutar una función de JavaScript en cada documento de la colección. La función verifica si el campofullName
contiene el camponame
utilizando el métodoindexOf
. SiindexOf
devuelve-1
, significa quename
no forma parte defullName
y el documento se devuelve en la consulta.Ten en cuenta que el operador
$where
puede ser lento para colecciones grandes, así que debes usarlo con cautela. Si es posible, deberías modificar tu esquema para asegurarte de quename
siempre esté incluido enfullName
o utilizar una canalización de agregación para calcularfullName
correctamente para todos los documentos.