我想知道是否有办法按关系对象的属性直接查询对象?
这可能听起来令人困惑,例如:
每个用户都有很多安装,我有从每个安装到用户的指针,形成多对一的关系。
我想找到属于具有给定用户名的一个用户的所有安装。
类似的用例:查找属于姓氏为' James'的用户的所有安装。但在这种情况下,有许多用户而不是一个用户。
我当前的解决方案是,查询用给定条件查找用户,然后为每个用户执行query.equalTo(" user",fetchedUser)的安装查询。这只是非常麻烦和昂贵。
另一个解决方案是"展平"对象并在查询目标对象上放置尽可能多的属性。所以我们可以使用query.find一次。对于我们的示例:在安装时放置用户名和姓氏的副本。但是如果我们最终不使用用户对象,那么数据就不那么关系了;如果我们选择保留用户对象,则在更新用户(母对象)时需要进行安装(子对象)的复杂同步,反之亦然。
有更好,更清洁的方法吗?
谢谢!
答案 0 :(得分:0)
是的,有一种更清洁的方式。几个月前我遇到了这个问题。
在这种一对多关系的场景中,您可以选择两种方法:RELATION或ARRAY对象。
如果您使用RELATION,作为优势,您对关系中的项目几乎没有限制。但是,作为一个缺点,您需要查询关系以获取信息,从而导致您提到的方法,包含许多查询。
如果您使用ARRAY对象,作为优势,您可以在查询中包含此字段,因此您只需一个查询就可以使所有子项都可用。但是,作为一个缺点,你将限制在100个孩子。
当我们谈论用户及其安装时,我认为对象的ARRAY是处理这种情况的最佳方法。