Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

91
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda