MongoDB Пропустить() и ограничить()

Я выполняю запросы на обновление коллекции монго с большим количеством записей. Поэтому я использую функции skip() и limit(). например: В первом файле я работаю над первыми 50000 записями.

cur1= db.collection_name.find(no_cursor_timeout=True).skip(0).limit(50000)

В файле отправки я получаю доступ к следующим 50000 записям

cur2=db.collection_name.find(no_cursor_timeout=True).skip(50000).limit(50000)

Я выполняю различные запросы на обновление этих двух курсоров в отдельных файлах. Теперь я хочу знать, как эти обновленные записи добавляются обратно в коллекцию? Будет ли cur2 извлекать записи, обновленные в запросах cur1?


person Mrunmayee    schedule 22.02.2016    source источник


Ответы (1)


Это может быть. Нет никакой гарантии, что вы получите записи в том же порядке. Всякий раз, когда документ вставляется или обновляется, порядок хранения документов в коллекции также изменяется. И этот порядок совершенно случайный.

Попробуйте использовать Robomongo, чтобы увидеть природу MongoDB в действии. Всякий раз, когда вы пытаетесь получить документы, после каждой операции обновления или вставки в колледже порядок записей меняется.

В этом случае я бы предложил сортировать записи по уникальному и монотонно возрастающему полю. Таким образом, вы будете уверены в получении неотредактированных записей во втором курсоре.

Надеюсь это поможет.

person SiddAjmera    schedule 22.02.2016
comment
Большое спасибо, и да, я применил сортировку к самому _id. - person Mrunmayee; 23.02.2016
comment
Да. Сортировка определенно помогает. @Mrunmayee: можете ли вы принять ответ и отметить его как решенный, если проблема решена. - person Nattyk; 19.07.2016