Я хочу скопировать коллекцию из mongodb в другой приемник данных. Один из подходов состоит в том, чтобы получить последнюю отметку времени записи оплога, записать ее, затем выполнить поиск по всей коллекции и выполнить итерацию по этому курсору, отправляя документы в приемник. Когда этот курсор исчерпан, я читаю операции с оплогами, начиная с временной отметки, которую я получил в начале. (что-то наподобие того, что делает mon go -connector ) В псевдокоде:
lastTs = getLatestOplogTimestamp(); -> t1
doDumpOfCollection(collectionName);
streamOperationsFromOlog(since=lastTs); - t2
Допустим, в промежутке между t1 и t2 произошли обновления для collectionName, в результате чего произнесен элемент был добавлен в массив вложенных документов или в какое-либо другое обновление с сохранением состояния.
document1.items.append(item1);
Вопросы:
Появятся / могут ли новые данные появиться в итерация курсора?
Что произойдет, когда я воспроизведу оплог - могу ли я иметь повторяющиеся элементы в массиве.
Документация предполагает, что другие операции могут быть «чередованы» с запросом, который предполагает, что ответом на оба из этих вопросов является «да».
Если да, то есть ли способ надежно скопировать одну коллекцию из mon go? Мне не кажется, что что-то вроде Mon go Connector делает это с надежной целостностью данных.