将 Firestore 文档作为纯 Javascript 对象获取?

Posted

技术标签:

【中文标题】将 Firestore 文档作为纯 Javascript 对象获取?【英文标题】:Get Firestore document as plain Javascript object? 【发布时间】:2018-06-11 19:16:27 【问题描述】:

我目前正在手动遍历 firestore 中的文档字段并将它们放入我字符串化为 JSON 的对象中。

有没有办法自动化这个过程?比如:

var userEnrollments = ToJson(await admin.firestore().collection(USERS + "/" + x.uid + "/" + ENROLMENT));

【问题讨论】:

【参考方案1】:

DocumentSnapshot 有一个方法 data() 将文档的全部内容(不包括子集合)作为纯 javascript 对象返回。

admin.firestore().doc('path/to/doc').get().then(snapshot => 
    const data = snapshot.data()  // a plain JS object 
)

【讨论】:

不幸的是,这似乎没有捕获参考。例如,注册文档有一个对课程文档的引用,但使用 snapshot.data() 将其显示为文档引用而不是普通的 JS 对象.. 对,就是这样。 Firestore 中的所有文档读取都很浅。您必须再次查询才能获得下一个文档。 ***.com/questions/46568850/… 这让我非常难过,我想将 ID 存储到那些引用以使深层副本正常工作会更有意义,而不是这会破坏整个事情的目的.. ***.com/questions/46900906/… ***.com/questions/46568850/…【参考方案2】:

尝试使用可观察的

var userEnrollments = Observable<User>;
Document userDoc = this.db.doc<User>('User/'+id);
this.userEnrollments = this.userDoc.valueChanges();

您可以使用数组,例如:Observable&lt;User[]&gt;;FirestoreCollection&lt;User&gt;;

我在角火中使用类似的。 您也可以在 firebase 中使用 ASYNC

【讨论】:

以上是关于将 Firestore 文档作为纯 Javascript 对象获取?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase firestore云功能显示错误:无效使用“undefined”类型作为Firestore参数

Cloud Firestore 文档添加给出错误“参数“数据”的值不是有效的 Firestore 文档。不能使用“未定义”作为 Firestore 值”

Firebase Firestore,在另一个文档中获取参考文档

Firestore - 节省文档读取费用

通过电子邮件将 Google 文档作为纯文本附件发送

如何将具有动态 ID 的文档保存到 Cloud Firestore?总是在变化