Gau*_*jan 0 mongodb mongoid ruby-on-rails-3
嗨,当我尝试继续出错以插入许多它在 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 =>错误的)
PushNotification.collection.insert_many([{:campaign_id => "1",:actor_vid => 9},{:campaign_id => "1",:actor_vid => 10}],:continue_on_error => true,: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' 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:inbulk_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:ininsert_many_with_clear_cache' from (irb):133 from /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' from /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 <top (required)>'
from script/rails:6:inrequire' from 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
Run Code Online (Sandbox Code Playgroud)
因此,在执行块后,您将插入 4 个新条目和 2 个Mongo::Error::BulkWriteError异常。
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |