J'essaie de récupérer mes documents avec un identifiant, mais je n'arrive pas à le comprendre.
Actuellement, je récupère mes documents comme ceci:
const racesCollection: AngularFirestoreCollection<Races> = this.afs.collection('races');
return racesCollection.valueChanges();
Je reçois ma liste de documents à la perfection, mais il n’ya pas de doc id avec eux.
Comment puis-je le récupérer pour chaque document?
J'ai enfin trouvé la solution. Victor était proche avec les données du doc.
const racesCollection: AngularFirestoreCollection<Race>;
return racesCollection.snapshotChanges().map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as Race;
data.id = a.payload.doc.id;
return data;
});
});
ValueChanges () n'inclut pas les métadonnées; nous devons donc utiliser SnapshotChanges () lorsque nous avons besoin de l'ID de document, puis le mapper correctement comme indiqué ici https://github.com/angular/angularfire2/blob/master/docs/ Firestore/Collections.md
Pour obtenir l'id des documents d'une collection, vous devez utiliser snapshotChanges()
this.shirtCollection = afs.collection<Shirt>('shirts');
// .snapshotChanges() returns a DocumentChangeAction[], which contains
// a lot of information about "what happened" with each change. If you want to
// get the data and the id use the map operator.
this.shirts = this.shirtCollection.snapshotChanges().map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as Shirt;
const id = a.payload.doc.id;
return { id, ...data };
});
});
Documentation https://github.com/angular/angularfire2/blob/7eb3e51022c7381dfc94ffb9e12555065f060639/docs/firestore/collections.md#example
Pour angular6 +
this.shirtCollection = afs.collection<Shirt>('shirts');
this.shirts = this.shirtCollection.snapshotChanges().pipe(
map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as Shirt;
const id = a.payload.doc.id;
return { id, ...data };
});
})
);
Peut obtenir un identifiant avant d'ajouter des documents dans la base de données:
var idBefore = this.afs.createId();
console.log(idBefore);
J'ai essayé ça!
colWithIds$<T>(ref: CollectionPredicate<T>, queryFn?): Observable<any[]> {
return this.col(ref, queryFn).snapshotChanges().pipe(
map(actions => {
return actions.map(a => {
const data = a.payload.doc.data();
const id = a.payload.doc.id;
return { id, ...data };
});
}));
}
mais je rencontre cette erreur
[ts] Les types de diffusion ne peuvent être créés qu'à partir des types d'objet . const données: T