重复键的错误有没有在红宝石的mongodb处理有关的异常任何很好的例子? 在这种情况下,我有:如何处理MongoDB的E11000红宝石
/home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/networking.rb:89:in `send_message_with_gle': 11000: E11000 duplicate key error index: somedb.somecoll.$_id_ dup key: { : "some_id" } (Mongo::OperationFailure)
from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/collection.rb:1108:in `block in insert_documents'
from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/util/logging.rb:33:in `block in instrument'
from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/util/logging.rb:65:in `instrument'
from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/util/logging.rb:32:in `instrument'
from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/collection.rb:1106:in `insert_documents'
from /home/askar/.rvm/gems/ruby-1.9.3-p429/gems/mongo-1.8.6/lib/mongo/collection.rb:375:in `insert'
from lib/tasks/getorders.rb:47:in `block in <main>'
from lib/tasks/getorders.rb:25:in `each'
from lib/tasks/getorders.rb:25:in `<main>'
我有这个错误,因为我试图插入已存在MongoDB中的数据库ID的文档,我只是想知道如何处理的MongoDB相关的异常在红宝石。 例如,如果出现异常,那么我会改变散列的ID,然后重新尝试插入。
如何救援块会是什么样子?
嗨!我有意识地在ruby中创建了_id,然后用这个_id创建一个文档。 _id根据我下载的文件创建。所以,如果发生_id重复错误,它会给我一个信号,表明我要下载相同的文件。而不是搜索mongodb数据库中的所有文档,以检查是否已经有一个具有相同_id的记录,我认为最好是捕获异常并进一步操作,不要下载或更改此dup记录的_id。感谢您的回答! – Askar
注意:最新的Ruby驱动程序将错误显示为Mongo :: Error :: OperationFailure。 – Joerg
通过@Joerg添加评论,e.message的正则表达式使用最新的驱动程序应该是/^E11000/ – neilfws