【问题标题】:Is there a way to dynamically retrieve Reference type fields from Firestore document?有没有办法从 Firestore 文档中动态检索引用类型字段?
【发布时间】:2018-12-20 10:18:19
【问题描述】:

我有这个函数,它接受 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;
  };

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 当我 console.log 每个数据的类型通过 Object.keys(data).forEach(key => console.log(typeof data[key])); DocumentReference 是 object 类型的,没有办法区分 JS 中的确切 DocumentReference 吗?
    • 检查它是否有你想调用的方法。或者使用 TypeScript,让一切变得更简单。
    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多