我正在Vue JS应用程序中使用Firebase的Firestore:
"firebase": "^5.8.0",
"vue-firestore": "^0.3.16",
当我尝试获取包含引用另一个文档(Firestore中的引用类型)的字段的文档时,出现以下错误:
[Vue warn]: Error in render: "TypeError: Converting circular structure to JSON"
每当我将文档中该字段的类型更改为字符串时,它似乎都可以正常工作。
我了解这是由于Firestore JS SDK中的某些内容正在尝试将文档(以及文档随附的一堆元数据)序列化为JSON,并且某处有循环引用?
在我的数据结构和字段中,我没有循环引用。仅仅是引用另一个文档的一个字段,被引用的文档就不再引用任何其他文档。
我获取数据的代码是:
methods: {
getContent() {
const db = this.$firebase.firestore();
db
.collection('places')
.doc(this.$route.params.placeKey)
.orderBy('name')
.get()
.then(snap => {
this.places = []
snap.forEach(doc => {
this.places.push(doc.data())
})
})
}
所以我的问题是:
1)首先,我在代码中做错了什么吗?即使没有出现错误,Firestore的JS SDK也会为我解决该引用吗?还是我必须调用引用并自己解析以获取引用文档的数据? 2)当您拥有可以引用的文档时,Firestore的最佳实践是什么?您应该使用参考吗?什么时候?您什么时候可以进行非规范化?
谢谢!
答案 0 :(得分:0)
要回答关于存储引用的第二个问题:实际上,在撰写此答案时,存储引用(即路径元素)没有真正的优势类型为Reference
,而不是将它们存储为String。
请观看Firebase https://www.youtube.com/watch?v=Elg2zDVIcLo&t=274s上的官方视频,其中包含详细说明(从4:34开始)。