我有一个像Shop > warehouse > categories > cat1,cat2,..
这样的数据库,每个类别都有一个名称及其文档。我只想要这些类别,并尝试使用此代码:
firestore.collection("shop/warehouse").addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@javax.annotation.Nullable QuerySnapshot queryDocumentSnapshots, @javax.annotation.Nullable FirebaseFirestoreException e) {
if(queryDocumentSnapshots != null) {
for (DocumentSnapshot doc : queryDocumentSnapshots) {
String item = doc.getId();
Log.d("TEST ITEM", item);
}
} else Log.d(TAG, "queryDocumentSnapshots is null.");
}
});
但正如预期的那样,我收到了这个错误:
Invalid collection reference. Collection references must have an odd number of segments, but shop/warehouse has 2
所以我用Google搜索并找到了a solution that suggests to divide in collection/document并写了这个:
firestore.collection("shop/").document("warehouse").addSnapshotListener(new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@javax.annotation.Nullable DocumentSnapshot documentSnapshot, @javax.annotation.Nullable FirebaseFirestoreException e) {
Map<String, Object> map = documentSnapshot.getData();
Log.d("size", map.keySet().size()+"");
}
但是这个键集(我假设它们是类别名称)是空的。我该怎么做?怜悯我,这是我第一次使用Firebase!
答案 0 :(得分:0)
要解决此问题,请更改以下代码行:
firestore.collection("shop/").document("warehouse").addSnapshotListener(/* ... */);
到
firestore.collection("shop").document("warehouse").addSnapshotListener(/* ... */);
没有必要/
。您可以在Firebase实时数据库中使用此类引用"shop/warehouse"
,其中所有对象都称为子项,并且您可以在单个路径中链接所有子项。这是一种更优雅的方式,但不幸的是,它并未在Cloud Firestore中获得认可。
答案 1 :(得分:0)
没有API可以列出集合中存在的文档ID。您必须查询并阅读集合中的所有文档才能获取ID。