Pregunta

Me acabo de dar cuenta de que cuando observas el movedTo evento en algunos cursor, el evento solo se activa para documentos que realmente cambiaron su pariente posición en el conjunto resultante, por lo que no solo su índice. Por ejemplo, si el conjunto de documentos resultante es primero igual a [1, 2, 3], y luego cambia a [3, 1, 2], el evento se activará solo para el tercer documento, no para todos. Si bien suena razonable desde el punto de vista de eficiencia, la documentación no está del todo clara (mira aquí):

MovedTo (documento, deindex, toindex, antes)

Un documento cambió su posición en el conjunto de resultados, desde fromIndex a toIndex(que está antes del documento con ID before). Su contenido actual es documento.

Para mí, "cambió su posición en el conjunto resultante, desde el índice hasta el índice" suena más como si los tres cambiaran su posición, por lo que de hecho:

  • Uno va del índice 0 al Indice 1, ...
  • Dos va del índice 1 al Indice 2, y ...
  • Tres va del índice 2 a 0.

Lo que quiero lograr es observar un cursor y saber si el index de cada documento cambia o no. Si bien tengo una idea aproximada de cómo implementar esto, me pregunto si hay una forma simple (óptima?) Y "amigable con los meteoritos" para resolver este problema.

¿Fue útil?

Solución

Este comportamiento en realidad tiene mucho sentido no solo desde el punto de vista de rendimiento. Piénselo de esa manera:

Cuando usas observe método, desea que se le notifique todos los cambios que le suceden a la recopilación (ya sea en el servidor o en Minimongo). Entonces, cada una de las devoluciones de llamada que recibe es una única instancia de modificación del recopilación. Cuando cambia el orden de los objetos moviendo uno de ellos a otro lugar, cambia la colección una vez, Por lo tanto, desea recibir solo una devolución de llamada para este evento.

¡No querrás ser notificado 42 veces sobre un solo evento!

 


 

Creo que la forma más fácil de multiplicar esa notificación para todos los objetos movidos es recaudarlos manualmente dentro de la devolución de llamada. Cuando un elemento se mueve de la posición A a la posición B, usted sabe que todos los objetos que estaban entre A y B también se han desplazado. Entonces, si necesita ajustar cada uno de ellos, simplemente haga esto en el bucle que va de A a B en toda la lista.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top