![](/img/trans.png)
[英]What is the most efficient way to get all documents from multiple sub-collections of multiple sub-collections in Firestore?
[英]Read data from multiple sub-collections in Firestore?
我堅持從 Firestore 的子集合中獲取數據。 我在下面附上我的代碼腳本以供參考。
現在我從一個特定的子集合中獲取數據。 使用此查詢行:
Query query = db.collection("Users").document("Group").collection("Group_1);
它工作正常並且也返回數據。
但是我想從 Group 文檔中獲取所有數據。
下面的鏈接附加到我的數據庫圖像。
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.