插入许多 mongo - 出错时继续 ruby / Ruby Mongo 等效于 mysql 插入忽略

Insert many mongo - continue on error ruby / Ruby Mongo equivalent for mysql insert ignore

你好,当我尝试继续错误插入很多时,它在 mongoid 中不起作用。

我设置了如下唯一索引

db.push_notifications.createIndex({ actor_vid: 1,campaign_id: 1 },{ unique: 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 => false)

PushNotification.collection.insert_many([{:campaign_id => "1",:actor_vid => 9},{:campaign_id => "1",: actor_vid => 10}],:continue_on_error => 真, :safe => 假) 抛出

Mongo::Error::BulkWriteError: Mongo::Error::BulkWriteError 来自 /home/deploy/.bundler/notification_service/ruby/2.2.0/gems/mongo-2.2.5/lib/mongo/bulk_write/result.rb: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:inresult' 来自 /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:inbulk_write' 来自 /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:ininsert_many_with_clear_cache' 来自(IRB):133 来自 /home/deploy/.bundler/notification_service/ruby/2.2.0/gems/railties-4.2.6/lib/rails/commands/console.rb:110:in start' from /home/deploy/.bundler/notification_service/ruby/2.2.0/gems/railties-4.2.6/lib/rails/commands/console.rb:9:instart' 来自 /home/deploy/.bundler/notification_service/ruby/2.2.0/gems/railties-4.2.6/lib/rails/commands/commands_tasks.rb:68:in console' from /home/deploy/.bundler/notification_service/ruby/2.2.0/gems/railties-4.2.6/lib/rails/commands/commands_tasks.rb:39:inrun_command!' 来自 /home/deploy/.bundler/notification_service/ruby/2.2.0/gems/railties-4.2.6/lib/rails/commands.rb:17:in <top (required)>' from script/rails:6:inrequire' 来自 script/rails:6:in `'

mongomysql insert ignore 的等效项是什么?我需要执行 insert_many 操作并在 unique keys

上绕过错误

continue_on_error 不是 insert_many 的选项,请使用 无序插入 instead.By 指定ordered: false ,插入将以无序方式发生,它会尝试插入所有 requests.Including 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 异常。