Firestore - 如何从DocumentSnapshot获取集合?

时间:2017-10-16 16:56:07

标签: java android firebase google-cloud-firestore

假设我使用userSnapshot操作我有一个get

DocumentSnapshot userSnapshot=task.getResult().getData();

我知道我可以从field这样获得documentSnapshot(例如):

String userName = userSnapshot.getString("name");

它只是帮助我获取fields的值,但如果我想在此collection下获得userSnapshot该怎么办?例如,其friends_list collection包含documents个朋友。

这可能吗?

1 个答案:

答案 0 :(得分:3)

Cloud Firestore中的查询很浅。这意味着当您get()文档时,您不会下载子集合中的任何数据。

如果要获取子集中的数据,则需要发出第二个请求:

// Get the document
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();

            // ...

        } else {
            Log.d(TAG, "Error getting document.", task.getException());
        }
    }
});

// Get a subcollection
docRef.collection("friends_list").get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (DocumentSnapshot document : task.getResult()) {
                        Log.d(TAG, document.getId() + " => " + document.getData());
                    }
                } else {
                    Log.d(TAG, "Error getting subcollection.", task.getException());
                }
            }
        });