Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

93
Vistas
Mantener la clasificación automática como una columna en MongoDB

Estoy usando MongoDB como mi base de datos.

Tengo datos que contienen rango y nombre como columnas. Ahora se puede actualizar una nueva fila con un rango diferente de los rangos ya existentes o puede ser el mismo.

Si es igual, se deben ajustar los rangos de otras filas.

Las filas que tienen un rango menor que el que se va a insertar deben incrementarse en uno y las filas que tienen rangos pueden permanecer como este.

La característica es algo así como una lista con viñetas de números en el tipo de aplicaciones de MS Word. Cuando inserte una fila en el medio, ajuste la numeración de otras filas debajo de ella.

El rango 1 es el rango más alto.

Por ejemplo, hay 3 filas

 Name Rank A 1 B 2 C 3

Ahora quiero actualizar una fila con D como nombre y 2 como rango. Así que ahora, después de la inserción de la fila, la base de datos debería gustar a continuación

 Name Rank A 1 B 3 C 4 D 2

Probablemente usando activadores de base de datos puedo lograr esto actualizando las otras filas.

Tengo un par de preguntas

(a) ¿Hay alguna otra manera mejor que usar el activador de la base de datos para lograr este tipo de escenario? Actualizar todas las filas puede ser un trabajo lento.

(b) ¿La base de datos compatible con MongoDB se activa de forma nativa?

Saludos,

Saurav

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No, MongoDB no proporciona disparadores (todavía). Además, no creo que el disparador sea realmente una excelente manera de lograr esto.

Así que me gustaría lanzar algunas ideas, ver si tiene sentido.

Enfoque 1

Tal vez en lugar de perturbar tantos documentos, puede crear una colección con un solo documento (llamemos clasificación de la colección). En ese documento, tenga un rango de llamada de campo de matriz. Como es una matriz, ya está manteniendo una secuencia.

 { _id : "RANK", "ranks" : ["A","B","C"] }

Ahora, si desea agregar D a este rango en la segunda posición

 db.ranking.update({_id:"RANK"},{$push : {"ranks":{$each : ["D"],$position:1}}});

agregaría D al índice 1, que es la segunda posición considerando que el índice comienza en 0.

 { _id : "RANK", "ranks" : ["A","D","B","C"] }

Pero hay un problema, ¿qué sucede si desea cambiar la posición C a la 1ra desde la 4ta, debe eliminarla del final y colocarla al principio, estoy seguro de que ambas operaciones no se pueden lograr en una sola actualización (no cavar mucho en las opciones), por lo que podemos ejecutar dos consultas

 db.ranking.update({_id:"RANK"},{$pull : {"ranks": "C"}}); db.ranking.update({_id:"RANK"},{$push : {"ranks":{$each : ["C"],$position:0}}});

Entonces sería como { _id : "RANK", "ranks" : ["C","A","D","B"] }

manteniendo el resto de la secuencia.

Ahora probablemente desee almacenar la identificación en lugar de A, B, C, etc. Un documento puede tener 16 MB, por lo que, básicamente, esta matriz de rangos puede almacenar más de 1,3 millones de entradas de identificación, si la identificación es MongoDB ObjectId de 12 bytes cada una. si eso no es suficiente, aún tenemos la opción de tener documentos de seguimiento con mayor clasificación.

Enfoque 2

también puede, en lugar de tener rango como número, solo tener dos campos como seguido por y precedido por.

por lo que su documento de usuario se vería

 { _id:"A" "followedBy":"B", } { _id:"B" "followedBy":"C", "precededBy":"A" } { _id:"c" "precededBy":"B", }

si desea agregar D en la segunda posición, entonces debe cambiar la segunda posición actual y debe insertar la nueva, por lo que sería un cambio en solo dos documentos

 { _id:"A" "followedBy":"B", } { _id:"B" "followedBy":"C", "precededBy":"D" //changed from A to D } { _id:"c" "precededBy":"B", } { _id:"D" "followedBy":"B", "precededBy":"A" }

La desventaja de este enfoque es que no puede ordenar la consulta en función de la clasificación hasta que obtenga todos estos en la aplicación y cree una especie de estructura de lista vinculada.

Este enfoque solo conserva la clasificación con cambios mínimos en la base de datos.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda