Domanda

Mi sono appena reso conto che quando osservi il movedTo evento su alcuni cursor, l'evento è innescato solo per i documenti che hanno effettivamente cambiato il loro parente posizione nel set risultante, quindi non solo il suo indice. Ad esempio, se il set di documenti risultante è prima uguale a [1, 2, 3], e poi cambia in [3, 1, 2], l'evento verrà attivato solo per il terzo documento, non tutti. Sebbene sembri ragionevole dal punto di vista dell'efficienza, la documentazione non è affatto chiara (guarda qui):

spostato (documento, dall'indice, toindex, prima)

Un documento ha modificato la sua posizione nel set di risultati, da fromIndex a toIndex(che è prima del documento con ID before). Il suo contenuto attuale è il documento.

Per me, "ha cambiato la sua posizione nel set risultante, da indice all'indice" suona più come tutti e tre hanno cambiato la loro posizione, quindi in realtà:

  • uno va dall'indice 0 indicizzare 1, ...
  • Due vanno dall'indice 1 indicizzare 2, e ...
  • Tre vanno dall'indice 2 a 0.

Quello che voglio ottenere è osservare un cursor e sapere se il index di ogni documento cambia o no. Mentre ho qualche idea approssimativa su come implementarlo, mi chiedo se esiste un modo semplice (ottimale?) E "amichevole" per risolvere questo problema.

È stato utile?

Soluzione

Questo comportamento in realtà ha perfettamente senso non solo dal punto di vista delle prestazioni. Pensaci in questo modo:

Quando usi observe metodo, vuoi essere avvisato di tutte le modifiche che si verificano al collezione (sia sul server che in minimi. Quindi ciascuno dei callback che ricevi è una singola istanza di modifica del collezione. Quando si cambia l'ordine degli oggetti spostando uno di loro in un altro posto, si cambia la raccolta una volta, Quindi vuoi ricevere solo un callback per questo evento.

Non vuoi essere avvisato 42 volte su un singolo evento!

 


 

Penso che il modo più semplice per moltiplicare quella notifica per tutti gli oggetti spostati sia quello di lanciarli manualmente all'interno del callback. Quando un oggetto si sposta dalla posizione A alla posizione B, sai che anche tutti gli oggetti tra A e B sono stati spostati. Quindi, se hai bisogno di regolare ciascuno di essi, fai semplicemente questo in loop che va da A a B durante l'intero elenco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top