2013-05-03 3 views
2

Я использую pymongo для вставки и извлечения данных из MongoDB. Эти две операции могут выполняться одновременно. Вопрос в том, когда я делаю rows = db.<collection>.find() в pymongo, каждый раз, когда rows.count() возвращает другой ответ (поскольку вставка данных также выполняется одновременно). Есть ли способ ограничить MongoDB возвращать только строки, которые присутствовали при выполнении инструкции find()? Я попытался добавить snapshot=True в find(), но проблема не устранена.моментальный снимок MongoDB

+0

Добавление моментального снимка = True работал для меня. Я получил курсор после find(), затем я сохранил count(), итерацию над курсором, вставляя новые документы на каждой итерации, а затем, когда это было закончено, я сделал еще один счетчик() на том же курсоре и подтвердил, что он был тем же как первый сохраненный счетчик(). Кстати, моментальный снимок также исправляет update() от изменения количества итераций документов. См. Https://groups.google.com/forum/#!topic/mongodb-user/0bCEb7vcUvg. – fthinker

ответ

1

db.<collection>.find().count() сделает дополнительный (runCommandcount) звонок в mongodb в любом случае.

Как насчет просто взять длину курсора, например:

rows = db.<collection>.find() 
print len(list(rows)) 

Обратите внимание, что вы не можете просто использовать len(rows).

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

Смежные вопросы