如果数据已经存在,我需要更新MongoDB中的一些数据,如果不是upsert或用这些数据创建记录。 我的模特是:
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
有人知道如何解决这个问题吗?非常感谢你的帮助!
答案 0 :(得分:1)
Garage.cars.where(:car_make => "Ford", :plate_number =>"12x234").upsert(:car_make => "Ford", :plate_number =>"12x234", :car_colour=>"red", :year_make="2012")
试试这个......不确定这是否有用