您好,当我尝试继续进行错误插入操作时,它在mongoid中不起作用。
我设置以下唯一索引
db.push_notifications.createIndex({actor_vid:1,campaign_id:1},{唯一:true,partialFilterExpression:{campaign_id:{$ exists:true}}})
PushNotification.collection.insert_many([[{:campaign_id =>“ 1”,:actor_vid => 9},{:campaign_id =>“ 1”,:actor_vid => 8}],:: continue_on_error => true,:safe =>错误的)
PushNotification.collection.insert_many([[{:campaign_id =>“ 1”,:actor_vid => 9},{:campaign_id =>“ 1”,:actor_vid => 10}],:: continue_on_error => true,:safe =>错误)抛出
来自/home/deploy/.bundler/notification_service/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/bulk_write/result.rb的//home/deploy/.bundler/notification_service/ruby/2.2.0的Mongo :: Error :: BulkWriteError: 184:in validate!' from /home/deploy/.bundler/notification_service/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/bulk_write/result_combiner.rb:73:in
result'from /home/deploy/.bundler/notification_service/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/bulk_write.rb:65:in execute' from /home/deploy/.bundler/notification_service/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/collection.rb:385:in
bulk_write'from / home / deploy /。 bundler / notification_service / ruby / 2.2.0 / gems / mongo-2.2.5 / lib / mongo / collection.rb:363:in(insert_many' from /home/deploy/.bundler/notification_service/ruby/2.2.0/gems/mongoid-5.1.3/lib/mongoid/query_cache.rb:168:in
_irb)中的insert_many_with_clear_cache':133 from /home/deploy/.bundler/notification_service/ruby/ 2.2.0 / gems / railties-4.2.6 / lib / rails / commands / console.rb:110:start' from /home/deploy/.bundler/notification_service/ruby/2.2.0/gems/railties-4.2.6/lib/rails/commands/console.rb:9:in
从/home/deploy/.bundler/notification_service/ruby/2.2.0/gems/railties-4.2开始。 6 / lib / rails / commands / commands_tasks.rb:68:inconsole' from /home/deploy/.bundler/notification_service/ruby/2.2.0/gems/railties-4.2.6/lib/rails/commands/commands_tasks.rb:39:in
运行命令!' 来自/home/deploy/.bundler/notification_service/ruby/2.2.0/gems/railties-4.2.6/lib/rails/commands.rb:17:in require'from <top (required)>' from script/rails:6:in
script / rails:6:in` '
或什么是mysql insert ignore的mongo等效项?我需要执行insert_many操作,并绕过唯一键上的错误
continue_on_error不是insert_many的选项,而是使用无序插入。通过指定ordered:false,插入将以无序方式发生,并且将尝试插入所有请求。包括try catch块将确保它不会在插入后中断例外,因此您正在实现与MYSQL INSERT IGNORE等效的功能。如果您使用的是ROR,则代码应为这样,
begin
PushNotification.collection.insert_many([{:campaign_id => "1",:actor_vid => 10},{:campaign_id => "1",:actor_vid => 11},{:campaign_id => "1",:actor_vid => 12}],{:ordered => false})
PushNotification.collection.insert_many([{:campaign_id => "1",:actor_vid => 10},{:campaign_id => "1",:actor_vid => 11},{:campaign_id => "1",:actor_vid => 13}],{:ordered => false})
resque => ex
puts ex.message
end
因此,在执行块之后,您将插入4个新条目和2个Mongo::Error::BulkWriteError
Exception。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句