Атомное удаление коллекции монго с помощью драйвера ruby - PullRequest
0 голосов
/ 12 февраля 2011

Мое приложение на рельсах поддерживается mongoid / mongo.Между каждым тестом я хочу очистить базу данных.Для этого я запускаю

::Mongoid.database.collections.select { |c| c.name !~ /^system/ }.each { |c| c.remove() }

Проблема в том, что удаление коллекции выполняется в фоновом режиме.Иногда начинается следующий тест, вставьте документ и затем очистите его с помощью операции удаления.Есть ли способ сделать блокировку удаления коллекции?

Я понимаю, что есть опция $ atomic, посмотрев на источник для mongo / collection, я не вижу способа передать эту опцию. Как можноСделать блокировку удаления коллизий?

1 Ответ

1 голос
/ 12 февраля 2011

Mongoid, когда вы вызываете remove, просто передает то, что вы посылаете в качестве аргументов, основному драйверу mongo ruby. Из документации API http://api.mongodb.org/ruby/1.2.1/Mongo/Collection.html#remove-instance_method safe => true блокирует, пока это не будет сделано. Итак:

::Mongoid.database.collections.select { |c| c.name !~ /^system/ }.each { |c| c.remove(:safe => true) }
...