首页 > 解决方案 > 访问firestore中文档内的集合

问题描述

我有一个文档,其中有一个名为relatives. 在云功能中,我有onUpdate()此文档的侦听器。更改某些内容后,我想访问文档中的该集合。也是集合中的文件relatives

这是它的样子:

在此处输入图像描述


我试过的

exports.UpdateLocations = functions.firestore.document("users/{userID}").onUpdate((change, context) => {
    const userEmail = change.after.data().email;
    const prevLocation = change.before.data().userLocation;
    const currentLocation = change.after.data().userLocation;

    if (prevLocation === currentLocation) return 0;

    if (change.after.data().userType.toString() === "Patient") {
        const userLocation = change.after.data().userLocation;
        const relatives = change.after.data().relatives;

        console.log("User's Current Location: " + userLocation);
        console.log("Relatives : "+relatives );

    }
    return;

});


我想访问亲属及其文件。所以我可以搜索和比较字段并故意更新它们。

标签: firebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


要从 a 获取子集合DocumentSnapshot,您必须首先获取DocumentReference该快照的文档,然后在其CollectionReference下找到。

在代码中:

change.after.ref.collection("relatives")

在这里:

  1. change.after为您提供DocumentSnapshot修改后的文档。
  2. change.after.ref然后给你DocumentReference那个文件的,所以它在数据库中的位置。
  3. change.after.ref.collection("relatives")然后给你文档CollectionReferencerelatives子集合。

因此,从这些子集合中获取数据,您必须实际加载该数据,它尚未包含在change传递给您的函数的对象中。

因此,如果您想为触发该功能的用户加载所有亲属,则类似于:

let relativesRef = change.after.ref.collection("relatives");
return relatives.get().then((querySnapshot) => {
  querySnapshot.forEach((relativeDoc) => {
    console.log(doc.id, doc.data().relativeaccount);
  });
});

推荐阅读