Question

Je viens de réaliser que lorsque vous observez le movedTo événement sur certains cursor, l'événement n'est déclenché que pour des documents qui ont réellement changé leur relatif Position dans l'ensemble résultant, donc non seulement son index. Par exemple, si l'ensemble de documents résultant est d'abord égal à [1, 2, 3], puis il change à [3, 1, 2], l'événement ne sera déclenché que pour le troisième document, pas tous. Bien que cela soit raisonnable du point de vue de l'efficacité, la documentation n'est pas du tout claire (regardez ici):

déplacé (document, fromindex, toindex, avant)

Un document a changé sa position dans l'ensemble de résultats, à partir de fromIndex à toIndex(qui est devant le document avec ID before). Son contenu actuel est un document.

Pour moi, "a changé sa position dans l'ensemble résultant, de l'index à l'index" sonne plus comme tous les trois ont changé leur position, donc en fait:

  • on va de l'index 0 indexer 1, ...
  • Deux va de l'index 1 indexer 2, et ...
  • Trois va de l'index 2 à 0.

Ce que je veux réaliser, c'est observer un cursor et savoir si le index de chaque document change ou non. Bien que j'aie une idée approximative de la façon de mettre en œuvre cela, je me demande s'il existe un moyen simple (optimal?) Et "Metyor Friendly" pour résoudre ce problème.

Était-ce utile?

La solution

Ce comportement est vraiment logique non seulement du point de vue des performances. Pensez-y de cette façon:

Lorsque vous utilisez observe Méthode, vous voulez être informé de tous les changements qui se produisent le recueil (que ce soit sur le serveur ou dans Minimongo). Ainsi, chacun des rappels que vous recevez est une seule instance de modification du le recueil. Lorsque vous modifiez l'ordre des objets en déplaçant l'un d'eux dans un autre endroit, vous changez la collection une fois que, Vous voulez donc recevoir un seul rappel pour cet événement.

Vous ne voulez pas être informé 42 fois sur un seul événement!

 


 

Je pense que le moyen le plus simple de multiplier cette notification pour tous les objets déplacés est de les boucler manuellement dans le rappel. Lorsqu'un élément passe de la position A à la position B, vous savez que tous les objets qui se trouvaient entre A et B ont également été décalés. Donc, si vous devez ajuster chacun d'eux, faites-le simplement en boucle qui va de A à B sur toute la liste.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top