gpt4 book ai didi

java - Firebase 查询 Or'ing whereEqualTo 以获得可能值的列表

转载 作者:行者123 更新时间:2023-11-29 23:46:26 26 4
gpt4 key购买 nike

我看过 this question before for an earlier version of Firebase不再适用于 Firebase Cloud Firestore。

我想进行一个查询,根据潜在值列表检查文档字段的值,例如 whereEqualTo(someField, a OR b OR c OR ... OR n)。具体来说,我有一个类型为 Reference 的单个字段的潜在值列表,我希望我的查询返回指定集合中的所有文档,这些文档的字段值等于列表中的一个潜在值。我也在使用 .limit(10) 因为我正在对数据进行分页。

因此,例如,如果我的列表包含引用 [ref1、ref2、ref3],那么查询将类似于连接这 3 个查询:

查询 query1 = mDatabase.collection("myCollection").whereEqualTo("refField", ref1);
查询 query2 = mDatabase.collection("myCollection").whereEqualTo("refField", ref2);
查询 query3 = mDatabase.collection("myCollection").whereEqualTo("refField", ref3);

关于documentation ,在“限制”部分下,它提到:

逻辑或查询。在这种情况下,您应该为每个 OR 条件创建一个单独的查询,并将查询结果合并到您的应用中。

所以也许最好的方法是合并查询结果,但是如何做到这一点,并且限制为 10 个结果?

请注意,我正在使用 Java 进行 Android 开发。

最佳答案

I would like to make a query that checks a document's field's value against a list of potential values.

遗憾的是,Firestore 中没有可以帮助您实现此目的的查询。您可以做的是获取 myCollection 集合下的所有文档,并根据潜在值列表检查您需要的文档字段的值,如下所示:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference myCollectionRef = rootRef.collection("myCollection");
myCollectionRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<String> yourList = new ArrayList<>();
for (QueryDocumentSnapshot document : task.getResult()) {
DocumentReference reference = document.getDocumentReference("refField");
String stringReference = reference.getPath();
if (yourList.contains(stringReference)) {
Log.d(TAG, "Reference found!");
}
}
}
}
});

我假设您的列表包含字符串类型的文档引用。如您所见,我们需要序列化我们从数据库中获取的 DocumentReference 对象,方法是使用 getPath() 方法获取描述文档在数据库中位置的字符串.要将该路径字符串反序列化回 DocumentReference 对象,请使用 FirebaseFirestore.getInstance().document(path)方法。

附言。如果您对分页感兴趣, this 是通过将查询游标与 limit() 方法结合使用来对查询进行分页的方法。我还建议你看看这个 video 以便更好地理解。

关于java - Firebase 查询 Or'ing whereEqualTo 以获得可能值的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51332081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com