This的答案涉及如何将两个查询合并在一起,我认为可以对任意数量的已知查询执行此操作。但是,我有一个值数组,用于过滤包含具有这些值的字段的文档(对于所有值,该字段都是同一字段)。上面链接的方法似乎不足以实现此目的。
我尝试使用new运算符创建查询数组,但是由于Query
是私有的,因此无法正常工作。
Query query = db.collection("posts")
.whereEqualTo("userId", followingList)//followingList is a list of Strings that I want to query
.orderBy("imageUrl_1", Query.Direction.ASCENDING);
这不起作用,因为followingList
不是String
我如何创建无法使用的查询数组:
ArrayList<Query> list = new ArrayList<Query>();
for(String s : followingList){
list.add(new Query());//does not compile
}
我的Firestore的这张图片显示了followingList
的创建方式。当用户单击另一个用户的帖子后,它会更新。我想要做的是创建一个查询所有帖子的信息(包含在一个单独的集合中),这些帖子包含followingList
答案 0 :(得分:1)
我已经在我当前的项目中对此进行了测试,它工作正常(仅对两个具有followingList.size为2个元素的文档进行了测试)
public void testMy() {
db = FirebaseFirestore.getInstance();
List<String> followingList = new ArrayList<>();
followingList.add("tag1"); followingList.add("tag2"); followingList.add("tag3"); // ...
List<Task> taskList = new ArrayList<>();
for (String s : followingList) {
Query query = db.collection("invites")
.whereEqualTo("uid", s)
.orderBy("imageUrl_1", Query.Direction.ASCENDING);; //followingList is a list of Strings that I want to query
Task<QuerySnapshot> task = query.get();
taskList.add(task);
}
Tasks.whenAllSuccess(taskList.toArray(new Task[taskList.size()])).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
@Override
public void onSuccess(List<Object> objects) {
@SuppressWarnings("unchecked")
List<QuerySnapshot> querySnapshots = (List<QuerySnapshot>)(List<?>) objects;
for (QuerySnapshot qs : querySnapshots) {
for (QueryDocumentSnapshot qds : qs) {
Log.d(TAG, qds.getData().toString());
}
}
}
});
}