簡體   English   中英

從 Firestore 中的多個子集合中讀取數據?

[英]Read data from multiple sub-collections in Firestore?

我堅持從 Firestore 的子集合中獲取數據。 我在下面附上我的代碼腳本以供參考。

現在我從一個特定的子集合中獲取數據。 使用此查詢行:

 Query query = db.collection("Users").document("Group").collection("Group_1);

它工作正常並且也返回數據。

但是我想從 Group 文檔中獲取所有數據。

下面的鏈接附加到我的數據庫圖像。

Firestore 數據庫映像

  Query query = db.collection("Users");

    FirestoreRecyclerOptions<PatientRegister> response = new FirestoreRecyclerOptions.Builder<PatientRegister>()
            .setQuery(query, PatientRegister.class)
            .build();

    adapter = new FirestoreRecyclerAdapter<PatientRegister, RegisterHolder>(response) {
        @Override
        public void onBindViewHolder(RegisterHolder holder, int position, PatientRegister model) {


            holder.text_1.setText(model.getPatient_name());
            holder.text_2.setText(model.getGender());
            holder.text_3.setText(model.getDatetime());
       
        @Override
        public RegisterHolder onCreateViewHolder(ViewGroup group, int i) {
            View view = LayoutInflater.from(group.getContext())
                    .inflate(R.layout.registration_list, group, false);

            return new RegisterHolder(view);
        }

        @Override
        public void onError(FirebaseFirestoreException e) {
            Log.d("000147", e.getMessage());
        }
    };

我有一個類似的問題,我認為問題是你不能從文檔中獲取所有數據, .get()方法只適用於 collections。

在我的例子中,我只是解決了在我的文檔中添加數據以指定組的問題:

Map<String,Double> User = new HashMap<>();
User.put("name","MyUserName");
User.put("group",1);

現在得到所有:

db.collection("Users").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
   @Override
   public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
       postList.clear();
       for (DocumentSnapshot dc:queryDocumentSnapshots.getDocuments()) {
          //dc get each document
    }       
}

根據我的問題:

所以你想從Group文件下存在的所有 collections 中獲取所有文件?

以及您在評論中的回答:

是的,我想獲取Group文檔中的所有數據。

請注意,您無法做到這一點。 Firestore 中的查詢是淺表的,這意味着只會返回查詢所針對的集合中的文檔。 您無法從單個 go 中特定文檔下存在的多個子集合中獲取文檔。

要解決這個問題,您必須為每個子集合執行單獨的不同查詢,或者您可以使用集合組查詢 但是,使用您的實際架構,您將無法執行此類查詢,因為您的子集合是動態添加的。 所以你最好的選擇是像這樣稍微改變你的模式:

Firestore-root
  |
  --- users (collection)
       |
       --- $uid (document)
            |
            --- groups (sub-collection)
                  |
                  --- $groupId (document)
                        |
                        --- name: "Testing"

這樣,您可以簡單地獲取與所有用戶對應的所有組:

FirebaseFirestore db = FirebaseFirestore.getInstance();
Query groupsQuery = db.collectionGroup("groups");
groupsQuery.get().addOnCompleteListener(/* ... */);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM