IDでドキュメントを取得しようとしていますが、わかりません。
現在、次のようにドキュメントを取得しています。
const racesCollection: AngularFirestoreCollection<Races> = this.afs.collection('races');
return racesCollection.valueChanges();
ドキュメントリストは完全に取得できますが、ドキュメントIDはありません。
ドキュメントごとに取得するにはどうすればよいですか?
私はついに解決策を見つけました。ビクターは文書データに近かった。
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()にはメタデータが含まれないため、ドキュメントIDが必要な場合はSnapshotChanges()を使用し、ここに記載されているように適切にマッピングする必要があります https://github.com/angular/angularfire2/blob/master/ docs/firestore/collections.md
コレクション内のドキュメントのIDを取得するには、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 };
});
});
アンギュラー6+用
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 };
});
})
);
doc.id
はUIDを取得します。
次のように、1つのオブジェクトの残りのデータと結合します。
Object.assign({ uid: doc.id }, doc.data())
angular 8およびFirebase 6の場合、オプションIDフィールドを使用できます
getAllDocs() {
const ref = this.db.collection('items');
return ref.valueChanges({idField: 'customIdName'});
}
これにより、指定されたキー(customIdName)を持つオブジェクトのドキュメントのIDが追加されます
データベースにドキュメントを追加する前にIDを取得できます:
var idBefore = this.afs.createId();
console.log(idBefore);
これを試してみました!
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 };
});
}));
}
しかし、私はこのエラーに遭遇します
[ts]スプレッドタイプは、オブジェクトタイプからのみ作成できます。 constデータ:T