データが既に存在する場合は、MongoDB の一部のデータを更新する必要があります。更新しない場合は、このデータでレコードをアップサートまたは作成する必要があります。私のモデルは次のとおりです。
class Garage
include Mongoid::Document
include Mongoid::Attributes::Dynamic
has_many :cars
end
class Car
include Mongoid::Document
include Mongoid::Attributes::Dynamic
belongs_to :garage
index({ car_make: 1, plate_number: 1 }, { sparse: true, unique: true, drop_dups: true })
end
次に、このクエリがあります
Garage.cars.collecttion.find(:car_make => "Ford", :plate_number =>"12x234")
.update(:car_make => "Ford", :plate_number =>"12x234", :car_colour=>"red", :year_make="2012", {upsert: true})
ただし、このクエリは追加Garage _id
されcars
ないため、正しく機能しません。別のクエリも試しました:
Garage.cars.where(:car_make => "Ford", :plate_number =>"12x234")
.update(:car_make => "Ford", :plate_number =>"12x234", :car_colour=>"red", :year_make="2012")
しかし、オプションを取らない{upsert: true}
ので、まだ存在しない場合はレコードを作成しません! それから私はこれを試しました:
Garage.cars.where(:car_make => "Ford", :plate_number =>"12x234")
.find_and_modify(:car_make => "Ford", :plate_number =>"12x234", :car_colour=>"red", :year_make="2012", {upsert: true})
取得エラー:
failed with error 11000: "exception: insertDocument :: caused by :: 11000 E11000 duplicate key
誰もそれを修正する方法を知っていますか? 助けてくれてどうもありがとう!