如何在Firestore中插入“参考”值?

时间:2018-07-11 18:50:16

标签: javascript firebase google-cloud-firestore angularfire2

我正在尝试将文档插入集合中。我希望文档具有类型reference的属性以插入到集合中。但是每次我插入到集合中时,它都会以字符串或对象的形式出现。如何以编程方式插入reference类型的值?

enter image description here


绝对有可能在用户界面中做到这一点

enter image description here

5 个答案:

答案 0 :(得分:7)

可能最简单的解决方案是将引用键的值设置为doc(collection/doc_key)

示例代码:

post = {
        conetnet: "content...",
        title: "impresive title",
        user: db.doc('users/' + user_key),
    };

db.collection('posts').add(doc)

答案 1 :(得分:2)

该字段的值必须为DocumentReference类型。看来您要在其中放置另一个具有称为字符串的属性id的对象。

答案 2 :(得分:2)

我今天试图弄清楚这一点,我想到的解决方案是使用.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) => { ... })
    })

答案 3 :(得分:1)

这是要存储在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)
           })
   .
   ..
   ...
  }
}

答案 4 :(得分:0)

似乎最近的更新使得上述答案现在已经过时了。有趣的是,该解决方案现在变得更加容易。他们删除了.ref选项,但现在自动获得了参考。

所以您可以这样做:

const member = this3.$Firestore.doc('users/' + user2.user.uid);
this3.$Firestore.collection('teams').doc(this3.teamName).set({
  name: this3.teamName,
  members: [member],
});

成员是文档参考,就这么简单。 (忽略this3大声笑。)