leancloud如何做复杂的复合查询?

我有两个class,一个是user,一个是userInfo。
其中userInfo里面有一个字段叫userId,是一个pointer,就是user。还有一个字段是version,类型是string。

现在我要查询userInfo里面version是1.0的所有用户,按照时间排序。

目前我的方案是先获取userInfo里面符合条件的userId,然后再获取所有userId的数据。但是这样就做了两次网络请求。
能不能一次获取呢?

let infoQuery = UserInfo.query()
infoQuery.whereKey("version", equals: "1.0")
infoQuery.orderByDescending("updatedAt")

上面的代码获取的是userInfo的结果,我想要user的结果,如果用user进行query,那么就还要在userInfo里面去查询一次。
有没有只做一次查询的解决方案呢?

阅读 3.8k
1 个回答

已经解决了。
不应该把user作为pointer放入UserInfo里面。应该把UserInfo放入User里面,就可以了。
也就是说,User表里面有userInfo字段,类型是Pointer。UserInfo里面只有version字段。
这样就可以用下面的代码做查询了。

AVQuery *innerQuery = [AVQuery queryWithClassName:@"UserInfo"];
[innerQuery whereKeyExists:@"version"];
AVQuery *query = [AVQuery queryWithClassName:@"_User"];
[query whereKey:@"userInfo" matchesQuery:innerQuery];
[query findObjectsInBackgroundWithBlock:^(NSArray *comments, NSError *error) {
    // 
}];

如果大家有更好的解决方案,欢迎提出来。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题