Ruby on rails 对于最终属于某事物的无父对象,什么是正确的mongoid关系?
我有两个目标: 香蕉 篮子 香蕉没有篮子也能生存 但篮子里必须装一根香蕉 我做到了: 香蕉班 嵌入 班级篮 嵌入香蕉 但是 当我尝试制作香蕉时,mongoid抱怨没有篮子 解决办法是什么 香蕉没有篮子也能生存 这使它成为一级公民,因此嵌入并不是一个真正的选项,人们可以为不在篮子里的香蕉创建“影子篮子”,但这个想法在凌晨1点的时候太令人毛骨悚然了。不推荐 听起来一个篮子里可能有不止一个香蕉,但即使没有,改变聚合似乎也没有意义,即将篮子“放”在香蕉里。它不能模拟现实,所以它可能是一个糟糕的设计 篮子里必须装一根香蕉 您必须在客户代码中确保这一点,并将香蕉和篮子作为一级公民:Ruby on rails 对于最终属于某事物的无父对象,什么是正确的mongoid关系?,ruby-on-rails,mongodb,mongoid,Ruby On Rails,Mongodb,Mongoid,我有两个目标: 香蕉 篮子 香蕉没有篮子也能生存 但篮子里必须装一根香蕉 我做到了: 香蕉班 嵌入 班级篮 嵌入香蕉 但是 当我尝试制作香蕉时,mongoid抱怨没有篮子 解决办法是什么 香蕉没有篮子也能生存 这使它成为一级公民,因此嵌入并不是一个真正的选项,人们可以为不在篮子里的香蕉创建“影子篮子”,但这个想法在凌晨1点的时候太令人毛骨悚然了。不推荐 听起来一个篮子里可能有不止一个香蕉,但即使没有,改变聚合似乎也没有意义,即将篮子“放”在香蕉里。它不能模拟现实,所以它可能是一个糟糕的设计 篮子
basket { _id : 7871, ... }
banana { _id : 4545, basket_id : 7871, ... }
或
第二种变体更容易执行一个篮子必须有一个香蕉的规则,而第一种变体更容易确保一个香蕉不同时在两个篮子中
确保满足这些标准并不是一件小事,因为mongodb不支持事务,并且您不能自动修改多个文档。您的客户端代码必须处理此问题,例如通过锁定
basket { _id : 7871, banana_ids : [ 4545, ... ] }
banana { _id : 4545, ... }