对于一个甚至属于某个事物的无父母对象,什么是正确的mongoid关系



我有两个对象:

  1. 香蕉
  2. 吊篮

香蕉可以在没有篮子的情况下生存

但是篮子里必须装一根香蕉。

我做到了:

香蕉类嵌入

班级吊篮嵌入Banana

但是

当我尝试制作香蕉时,mongoid抱怨没有篮子。

解决方案是什么?

香蕉可以在没有篮子的情况下存在

这使它成为一级公民,因此嵌入并不是一个真正的选择(可以为不在篮子里的香蕉创建"影子篮子",但这个想法在凌晨1点太令人毛骨悚然了。不推荐)。

听起来一个篮子里可能有不止一根香蕉,但即使没有,扭转聚合似乎也没有意义(即将篮子"放"在香蕉中)。它没有模拟现实,所以它可能是一个糟糕的设计。

篮子里必须装一根香蕉。

您必须在客户端代码中确保这一点,并将香蕉和篮子作为一级公民:

basket { _id : 7871, ... }
banana { _id : 4545, basket_id : 7871, ... }

basket { _id : 7871, banana_ids : [ 4545, ... ] }
banana { _id : 4545, ... }

第二种变体使一个篮子必须有一根香蕉的规则更容易执行,而第一种变体使确保一根香蕉不同时在两个篮子中更容易。

确保满足这些标准并不是一件小事,因为mongodb不支持事务,并且不能原子地修改多个文档。您的客户端代码将不得不处理此问题,例如通过锁定。

最新更新