有没有办法从Firestore文档中动态检索引用类型字段?

时间:2018-07-12 08:58:06

标签: javascript firebase reference google-cloud-firestore denormalization

我有这个函数,它接受DataSnapshot作为参数。 我当前需要解决的问题是,我仍然必须事先知道我在Firestore文档中拥有哪些键。

这实际上还不够高效,我想找出一种方法来实际检索所有属于引用数据类型的字段,而无需事先知道键。这将使此Promise更加有用,例如,您可以传递任何DataSnapshot并将其解析为文档,并附加引用的文档。

getDenormalizedFields = (data: Object): Promise<any> => {
    const denormalizeKeys = ['refOne', 'refTwo', 'refThree'];
    const denormalizationPromise = new Promise(async (resolve: Function) => {
      const denormalizations = await denormalizeKeys.map(
        async (key: string) => {
          const field = await data[key].get();
          const fieldData = await field.data();

          return { [key]: fieldData };
        },
      );
      const promisedDenormalizations = await Promise.all(denormalizations);
      const denormalized = Object.assign({}, ...promisedDenormalizations);

      resolve(denormalized);
    });

    return denormalizationPromise;
  };

1 个答案:

答案 0 :(得分:0)

DocumentSnapshot上的data()方法为您提供了包含文档内容的原始JavaScript对象。您可以像对待任何JavaScript对象一样,以常规方式iterate the keys of this object,然后检查每个键的值。您可以找出该值是否为DocumentReference by checking its type,然后对它采取任何所需的操作。