Ich möchte eine Sammlung verwenden, um die Beziehung zwischen einigen Dokumenten zu halten, wie vorgeschlagen here (aber leicht modifizierten Ansatz). Ich habe den Sammlungsansatz gewählt, weil die Dokumenteigenschaften im Laufe der Zeit besser skalierbar erscheinen.Wie binden Sie mehrere Abfrageergebnisse in angularfire2 mit Firestore?
Meine aktuellen Daten scructure
users
user1
user2
companies
co1
co2
user_co
user1
companies (collection)
co1
co2
user2
companies (collection)
co1
Aber mit diesem Ansatz, ich brauche mehrere Abfragen zu tun, um alle verfügbaren Unternehmen für einen bestimmten Benutzer zu erhalten, wie wir nicht „IN“ Klausel ausführen können.
Also muss ich Daten in zwei Schritten ab:
- abrufen Liste der Benutzer Unternehmen Zugriff haben in
user_co/{user}/companies
- tatsächlichen Unternehmen abrufen von
/companies/{id}
Warum zwei Schritte? Weil ich nicht allen Benutzern Lesezugriff auf alle Benutzer geben möchte und die Abfrage /companies
würde dann Zugriffsfehler auslösen.
Also habe ich Schwierigkeiten damit, wie man eine einzelne bindbare Liste von Dokumenten abrufen kann, die von mehreren Anrufen abgerufen wurden?
Ich habe 2 Elemente in meiner Komponente angezeigt, aber Feldwerte werden nicht angezeigt. Ich mache sicherlich etwas falsch in der Art, wie ich Dokumente recherchiere.
Jede Hilfe würde sehr geschätzt werden.
MyService.ts
interface Company {
Name: string;
Owner: any;
id?: any;
time?: any;
creationTime?: any;
}
interface MyCompany {
id?: any;
Name: string;
}
@Injectable()
export class CompanyService {
companiesCollection: AngularFirestoreCollection<Company>;
myCompaniesCollection: AngularFirestoreCollection<MyCompany>;
myCompanies;
constructor(private afs: AngularFirestore, private ats: AuthService) {
this.myCompaniesCollection = this.afs.collection('user_co').doc(this.ats.currentUserId).collection('companies');
this.myCompanies = this.myCompaniesCollection.snapshotChanges().map(actions => {
return actions.map(a => {
// What is the good way to retrieve /companies data from here?
return this.afs.firestore.collection("companies").doc(a.payload.doc.id).get().then(doc => {
return { id: doc.id, ...doc.data() }
}).catch(error => {
console.log("Error reading company document:", error);
});
// Original example that return data from /user_co
//return { id: a.payload.doc.id, ...a.payload.doc.data() }
})
});
}
getData() {
return this.myCompanies;
}
}
angularfire2 5.0.0-rc.3 mit Feuerbasis 4.5.2