es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para detectar los documentos en los que name no forma parte de fullName, puedes utilizar el operador $where en MongoDB.

    Aquí tienes una consulta que debería conseguirlo:

    db.people.find({$where: "this.fullName.indexOf(this.name) === -1"});
    

    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 campo fullName contiene el campo name utilizando el método indexOf. Si indexOf devuelve -1, significa que name no forma parte de fullName 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 que name siempre esté incluido en fullName o utilizar una canalización de agregación para calcular fullName correctamente para todos los documentos.

Comments are closed.