Mongoid Embed文件发送2个查询删除Bug

时间:2013-12-19 07:17:21

标签: ruby-on-rails mongodb mongoid

class parent
  fields :count
  embed_many :children
end

class children
  embed_in: :parent
end

控制台

obj = Parent.first
obj.count #=> 2
obj.childrens #=> [children, children]
#here-to-update
obj.count = 5
obj.childrens.delete( obj.childrens.last )
#mongo-query
MOPED: 127.0.0.1:27017 UPDATE       database=db collection=parents selector={"_id"=>"52b277c62aa194882f000007"} update={"$pull"=>{"childrens"=>{"_id"=>3}}} flags=[]

obj.reload
obj.count #=> 2 (does not update, Bug)
obj.childrens #=> [children]

在关系数据库中,这不是一个错误,因为你需要更新2个表。但是在mongo中,因为它是嵌入文件。我认为发送2个查询来更新它是一种浪费。

任何解决方案?

1 个答案:

答案 0 :(得分:0)

你忘记了's'来命名你的嵌入关系。

class Order
  field :count, type: Integer
  embeds_many :Products
end

class Product
  embedded_in :Order
end

另外,请保存更改。

Order.set(:count, 5)

你知道你可以做吗?

order = Order.first
order.product_ids.count

然后,您的订单模型中不需要字段。

编辑:
- 好吧,要更改count字段值,您必须更新模型然后保存它 - 删除嵌入关系时,会删除嵌入对象 你不能只用一个来做这两个操作 希望我回答。