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.

Problema de restricción única en Mongo Db

Desarrollo del sistema ERP para escuelas. Tengo el esquema SCHOOL y dentro de este he referenciado el esquema COURSE. Lo que quiero hacer es tener algunos campos dentro del esquema COURSE únicos, como el nombre del curso dentro de una escuela particular. Pero si marco los campos como únicos en el esquema en sí, causará problemas.

Una escuela puede tener múltiples cursos, pero el nombre de los cursos debe ser único para esa escuela en particular. Sin embargo, dos escuelas diferentes pueden tener cursos con el mismo nombre. Ejemplo: la escuela A tiene btech, por lo que la escuela A no puede tener otro documento de curso con el mismo nombre, pero la escuela B puede tener un curso con el nombre de btech.

Si hago que el campo del nombre del curso sea único en el propio esquema, no podré agregar un nombre de curso que ya haya sido agregado en alguna otra escuela.

Podría hacer esto buscando directamente en la base de datos y verificando uno por uno el nombre del curso. Sin embargo, creo que esa no sería la solución ideal.

Por favor, háganme saber de algunas soluciones mejores.

Estoy usando MONGO DB.

//Esquema SCHOOL

const SchoolSchema = mongoose.Schema({
course: [{ type: mongoose.Schema.Types.ObjectId, ref: ‘course’ }]
})

//Esquema COURSE

const CourseSchema = mongoose.Schema({
course_name: {
type: String
}
})

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para hacer que el campo del nombre del curso sea único dentro de una escuela específica, puedes usar una combinación del ID de la escuela y el nombre del curso como índice compuesto para el esquema del curso. Esto permitirá que el nombre del curso sea único dentro de cada escuela, permitiendo simultáneamente que varias escuelas tengan cursos con el mismo nombre.

    Puedes hacer esto agregando el siguiente código a la definición del esquema del curso:

    const CourseSchema = mongoose.Schema({
      course_name: {
        type: String,
      },
      school: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'school'
      }
    });
    
    CourseSchema.index({course_name: 1, school: 1}, {unique: true});
    

    Este código agrega un índice compuesto en ‘course_name’ y ‘school’, lo que hará que la combinación de estos campos sea única. Ahora puedes insertar nuevos cursos en la base de datos y la base de datos hará cumplir automáticamente esta restricción única.

    Ten en cuenta que si intentas insertar un curso con el mismo nombre y la misma escuela que un curso existente, la base de datos lanzará un error de clave duplicada. Deberás manejar este error adecuadamente en tu código.

Comments are closed.