- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看过 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/
我正在尝试从解析中检索信息。特别是,我添加了一个条件,它只会返回选择相同 Activity 的用户列表。 我尝试了下面的代码,但它似乎确实有效,因为该条件返回一个空列表。 ParseQuery que
我有一个 Parse 类,它有一个指向另一个类的指针...我想计算 A 类中具有等于 B 类中某个字段的特定值的对象... 例如。 ParseQuery query = ParseQuery.getQ
我曾希望它会这么简单,但在尝试运行查询时出现以下异常:com.parse.ParseException:相等性需要一个值而不是 [value0, value1, ...] 如何获得具有这种情况的数据对
嗨,我有这个确切的数据库模式,其中有一个名为“状态”字段的文档,该字段有不同的值,它可以是“待处理”、“已发送”等。 我有一个 FirebaseUI Recycler,我想加载包含这两个值的所有文档。
我正在使用 JS 解析,并且我正在尝试建立反向关系... 我有以下表格.. 用户 优惠 User 表有一个 relationship 列,用于将用户与优惠相关联,我有两种类型的关系 used_offe
我有一个以city 作为字段的文档。我想查询一个包含 的文档 城市==“东京”和城市==“大阪”。 如何做到这一点? 我已经尝试过这个: query = ref .whereE
我有 100 个元素的集合。在这个集合中,只有两个元素具有字段 available设置为真。如果我使用这个查询: db.collection("elements").whereEqualTo("ava
我看过 this question before for an earlier version of Firebase不再适用于 Firebase Cloud Firestore。 我想进行一个查询,
我想做的是先检查用户输入的推荐代码是否存在。但问题是,即使我输入的文本不包含在数据库中,它也总是在 addOnSuccessListener 上进行。 //不要介意下一段。我只需要添加更多描述来保存编
考虑到多个 whereArrayContains() 不起作用,我在嵌套 HashMap 上使用多个 whereEqualTo() 时遇到问题。 我正在使用 firebase 制作简单的聊天应用程序,
我想查询我的锻炼 Collection 以获取日常锻炼中的最新锻炼。这意味着我使用 whereEqualTo 我的routineKey 进行查询,按开始时间戳按降序排序,然后限制为 1,然后获取锻炼的
我想查询我的锻炼 Collection 以获取例程中的最新锻炼。这意味着我用 whereEqualTo 查询我的 routineKey,按开始时间戳降序排列,然后限制为 1,然后获取锻炼的第一个键/I
我是一名优秀的程序员,十分优秀!