2

データが既に存在する場合は、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 

誰もそれを修正する方法を知っていますか? 助けてくれてどうもありがとう!

4

1 に答える 1

1
Garage.cars.where(:car_make => "Ford", :plate_number =>"12x234").upsert(:car_make => "Ford", :plate_number =>"12x234", :car_colour=>"red", :year_make="2012")

これを試してください..これが機能するかどうかわかりません

于 2014-10-15T11:25:44.687 に答える