search

Home  >  Q&A  >  body text

ruby - Mongoid为何不能对embedded_in的文档进行查询?

我在这里主要是想请教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操作)。

希望与各位同僚讨论,谢谢大家的支持。

高洛峰高洛峰2771 days ago654

reply all(0)I'll reply

No reply
  • Cancelreply