Maison > Questions et réponses > le corps du texte
我在这里主要是想请教Mongoid的设计思路,这也是我很烦恼的一个地方。首先有两个内嵌相关的Model:
class User
include Mongoid::Document
embeds_one :homepage
end
class Homepage
include Mongoid::Document
embedded_in :user
end
代码很简单,为了阐述方便。在这里,User与Homepage是典型的一对一关系。如果放在关系型数据库里,需要在Homepage里作一个外键映射。Mongo很灵活,可以把Homepage直接内嵌到User中去。我们很容易对User进行查询,例如User.all
;可是我把相同的语法放到Homepage.all
中去,却不起任何作用。
不要说什么Mongodb中只能对集合进行操作,User是集合,Homepage不是集合之类的;这里是Mongoid,不是Mongodb,完全可以实现Homepage的概念。何况,Homepage中也有一个id属性,如果不把它抽象成独立的集合来看,增加的那个id不就很鸡肋吗?
我纠结于此,不仅仅是因为我可以把embeds_one关系换成has_one。事实上我就是需要这样的语义。我会为User设计一套接口,例如/users
;同样会针对Homepage设计一套接口,例如/homepages
。但是,这样的话就会失去一个重要的体验,那就是根据Homepage的内容筛选User;更进一步的,我不能同时根据Homepage和User的内容筛选筛选User(也就是关系型数据库的join操作)。
希望与各位同僚讨论,谢谢大家的支持。