4

我想知道是否有办法通过关系对象的属性直接查询对象?

这可能听起来令人困惑,例如:

每个用户都有很多安装,我有每个安装指向它的用户的指针,形成多对一的关系。

我想找到属于具有给定用户名的一个用户的所有安装。

类似的用例:查找属于姓氏为“James”的用户的所有安装。但是在这种情况下,有很多用户而不是一个。

我目前的解决方案是,query.find 具有给定条件的用户,然后为每个用户使用 query.equalTo("user", fetchedUser) 进行安装查询。这只是感觉非常麻烦和昂贵。

另一种解决方案是“展平”对象并在查询目标对象上放置尽可能多的属性。所以我们可以只使用一次 query.find。对于我们的示例:在安装时放置用户名和姓氏的副本。但是,如果我们最终不使用用户对象,那么数据的相关性就会降低;如果我们选择保留用户对象,则在更新用户(母对象)时需要进行复杂的同步到安装(子对象),反之亦然。

有没有更好、更清洁的方法来做到这一点?

谢谢!

4

1 回答 1

0

是的,有一种更清洁的方法。几个月前我遇到了这个问题。

在这种一对多关系的场景中,您可以在两种方法之间进行选择:RELATION 或 ARRAY of objects。

如果你使用一个关系,作为一个优势,你对关系中的项目几乎没有限制。但是,作为一个缺点,您需要查询关系以获取信息,从而导致您提到的方法有很多查询。

如果您使用对象数组,作为一个优势,您可以在查询中包含此字段,因此只需一个查询即可获得所有子项。但是,作为一个缺点,您将被限制为 100 个孩子。

当我们谈论用户及其安装时,我认为对象数组是这种情况的最佳方法。

于 2015-12-10T13:56:11.360 回答