Według Sammaye'a nie wygląda na to, że istnieje „właściwy” sposób, aby to zrobić.Moim rozwiązaniem było utworzenie sekwencja zgodnie z opisem na stronie mongo i po prostu dodaj pole 'seq' do każdego rekordu w mojej kolekcji. Teraz mam unikalne pole, które można niezawodnie sortować do aktualizacji.
Niezawodne sortowanie jest tutaj ważne. Miałem zamiar posortować według automatycznie wygenerowanego identyfikatora _id, ale szybko zdałem sobie sprawę, że kolejność naturalna NIE jest tym samym, co kolejność rosnąca dla identyfikatorów ObjectId (od ta strona wygląda na to, że wartość ciągu ma pierwszeństwo przed wartością obiektu, która pasuje do zachowania, które zaobserwowałem podczas testowania). Ponadto całkowicie możliwe jest przeniesienie rekordu na dysk, co sprawia, że naturalna kolejność sortowania jest niepewna.
Więc teraz mogę zapytać o rekord z najmniejszą sekwencją, która NIE została jeszcze zaktualizowana, aby uzyskać włącznie punkt początkowy. Następnie wyszukuję rekordy z 'seq' większym niż mój punkt początkowy i pomijam (ważne jest, aby pominąć, ponieważ 'seq' może być rzadkie, jeśli usuniesz dokumenty itp.) liczbę rekordów, które chcę zaktualizować. Ustaw limit na 1 w tym zapytaniu, a otrzymasz nieuwzględniający punkt końcowy. Teraz mogę wydać aktualizację z zapytaniem „zaktualizowany” =0, „seq”>=mój punkt początkowy i
Oto kolejne kroki:
Dość bolesne, ale to załatwia sprawę.