Firebase Firestore:查询喜欢我的个人资料的用户的列表

时间:2018-09-26 20:29:28

标签: firebase flutter google-cloud-firestore

我正在使用Firebase Firestore构建Flutter应用程序。我正在尝试实现喜欢功能错误,但该错误遇到了某些平台限制。

我有一个收藏集users。 每个用户都有likedUsers个集合,我在其中存储了uid个喜欢的用户。另外,每个用户都有“ likedBy”集合,我在其中存储了uid个其他用户喜欢的当前用户。

Firestore不允许运行集合组查询,因此我无法获取其uid集合中当前用户为likedUsers的所有用户。

我只能从当前用户的“ likedBy”集合中获取用户uid的列表,并像这样逐个吸引用户:

final QuerySnapshot querySnapshot = await _db
    .collection(FirebaseContract.USERS_COL)
    .document(uid)
    .collection(User.LIKED_BY_COL)
    .getDocuments();


querySnapshot.documents.forEach(
  (DocumentSnapshot snapshot) {
    _db.collection(FirebaseContract.USERS_COL).document(snapshot.documentID).get().then(
      (DocumentSnapshot document) {
        print(document[User.NAME]);
      },
    );
  },
);

对于这个问题,还有没有比这更优雅,更省时又更具成本效益的解决方案了?

1 个答案:

答案 0 :(得分:1)

目前,Firestore移动API不能通过引用数组(无论是集合还是文档)来处理查询:

  

使用移动/ Web客户端库无法检索集合列表。在受信任的服务器环境中,应仅将集合名称作为管理任务的一部分进行查找。如果在移动/ Web客户端库中发现需要此功能,请考虑重组数据,以使子集合名称可预测。

Firestore documentation

这意味着从其引用中获取集合数组的唯一方法是枚举您执行此操作的方法。