ドキュメントをコレクションに挿入しようとしています。ドキュメントに、コレクションに挿入するreference
型の属性を持たせたい。しかし、コレクションに挿入するたびに、文字列またはオブジェクトとして出力されます。 reference
型付きの値をプログラムで挿入するにはどうすればよいですか?
UIでそれを行うことは間違いなく可能です。
おそらく最も簡単な解決策は、参照キーの値をdoc(collection/doc_key)
に設定することです。
サンプルコード:
post = {
conetnet: "content...",
title: "impresive title",
user: db.doc('users/' + user_key),
};
db.collection('posts').add(doc)
フィールドの値は、タイプ DocumentReference
でなければなりません。文字列であるid
というプロパティを持つ他のオブジェクトをそこに配置しているようです。
私は今日これを理解しようとしていましたが、私が来た解決策は.doc()
を使用してドキュメント参照を作成することでした
firebase.firestore()
.collection("applications")
.add({
property: firebase.firestore().doc(`/properties/${propertyId}`),
...
})
これにより、property
フィールドに DocumentReference タイプが格納されるため、データを読み取るときにドキュメントにアクセスできるようになります。
firebase.firestore()
.collection("applications")
.doc(applicationId)
.get()
.then((application) => {
application.data().property.get().then((property) => { ... })
})
これは、Firestoreに格納するモデルクラスです。
import { AngularFirestore, DocumentReference } from '@angular/fire/firestore';
export class FlightLeg {
date: string;
type: string;
fromRef: DocumentReference; // AYT Airport object's KEY in Firestore
toRef: DocumentReference; // IST {key:"IST", name:"Istanbul Ataturk Airport" }
}
FlightLegオブジェクトを参照値と共に保存する必要があります。これを行うためには:
export class FlightRequestComponent {
constructor(private srvc:FlightReqService, private db: AngularFirestore) { }
addFlightLeg() {
const flightLeg = {
date: this.flightDate.toLocaleString(),
type: this.flightRevenue,
fromRef: this.db.doc('/IATACodeList/' + this.flightFrom).ref,
toRef: this.db.doc('/IATACodeList/' + this.flightTo).ref,
} as FlightLeg
.
..
this.srvc.saveRequest(flightLeg);
}
別のオブジェクトを参照してオブジェクトをFirestoreに保存できるサービス:
export class FlightReqService {
.
..
...
saveRequest(request: FlightRequest) {
this.db.collection(this.collRequest)
.add(req).then(ref => {
console.log("Saved object: ", ref)
})
.
..
...
}
}