我的代码不完整我无法确定如何完成查询。
我想知道整个系列中是否存在123,456,789,
比如普通查询.whereEqualTo("address","P18/A CIT Road Ananda Palit");
会给我第三个文档,在这里我想查询card
CollectionReference ref = db.collection("company");
Query query = ref.whereEqualTo("card[]","???");
答案 0 :(得分:3)
要解决此问题,请使用以下代码:
ref.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
for (DocumentSnapshot document : task.getResult()) {
List<String> list = (List<String>) document.get("card");
for (String item : list) {
Log.d("TAG", item);
}
}
}
});
输出将是:
123
456
789
//and so on
请注意,document.get("card")
不返回array
,而是返回ArraList
。
如果您想使用whereEqualTo()
方法使用查询,那么我建议您稍微更改一下数据库。您的数据库结构如下所示:
Firestore-root
|
--- company
|
--- companyDocumentId
|
--- address: "P18/A CIT Road Palit"
|
--- card
|
--- 123: true
|
--- 456: true
|
--- 789: true
在这种情况下,您的查询应如下所示:
Query = ref.whereEqualTo("card.123", true);
修改强>
根据您的推荐,查询应该是:
Query = ref.whereEqualTo("card.E20040806709002620760CE82", true);
编辑2018年8月13日:
根据有关array membership的更新文档,现在可以使用whereArrayContains()
方法根据数组值过滤数据。一个简单的例子是:
CollectionReference citiesRef = db.collection("cities");
citiesRef.whereArrayContains("regions", "west_coast");
此查询返回每个城市文档,其中regions字段是包含west_coast的数组。如果数组具有您查询的值的多个实例,则文档仅包含在结果中一次。