2016-02-22 3 views
2

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

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-запросах?

ответ

5

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

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

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

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

+1

Большое спасибо, и да, я применил сортировку по самому _id. – Mrunmayee

+1

Да. Сортировать определенно помогает. @Mrunmayee: можете ли вы принять ответ и пометить его как решаемый, если проблема решена. – Nattyk