Javascript 从两个相关集合查询数据的最干净的解决方案是什么?
我目前的结构是这样的 收集站Javascript 从两个相关集合查询数据的最干净的解决方案是什么?,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我目前的结构是这样的 收集站 - PostID - titel - content - titelimgurl - tags - timestamp - PostID - titel - titelimgurl - tags - timestamp 现在在这里获取数据很容易,我想要实现的是将内容与其他内容分开,这样我就不必在我的frotnpage上获取不需要的数据 因
- PostID
- titel
- content
- titelimgurl
- tags
- timestamp
- PostID
- titel
- titelimgurl
- tags
- timestamp
现在在这里获取数据很容易,我想要实现的是将内容与其他内容分开,这样我就不必在我的frotnpage上获取不需要的数据
因此,我计划采用这种结构:
收集站
- PostID
- titel
- content
- titelimgurl
- tags
- timestamp
- PostID
- titel
- titelimgurl
- tags
- timestamp
收藏内容
- PostID
- content
问题是,我不确定如何在那里高效地检索数据,例如:
var postRef = db.collection("posts").doc(this.docID);
postRef.get().then(function(doc) {
if (doc.exists) {
var contentRef = db.collection("content").doc(doc.id)
contentRef.get().then(function(doc) {
....
}
} else {
// doc.data() will be undefined in this case
console.log("No such document!");
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
这看起来太复杂了,特别是当将这些数据分配到我的商店中的一个实际帖子集合时,任何关于如何提高效率的想法都值得赞赏。如果您只想查询一次数据库,那么您不应该通过创建作为顶级集合的
内容来反规范化您的数据库。您可以将帖子内容作为属性保留在PostID
文档中。与Firebase实时数据库中显示post
对象列表不同,您将下载整个posts
节点,在Cloud Firestore中,这不再是一个问题。因此,您可以随意将内容保留为属性,以便进行单个查询。这对于Firestore和NoSQL来说是相当标准的,因为没有“连接”操作。@DougStevenson好的,但我如何知道在成本方面将集合分为不同部分更有效。(更多读取vs更大读取)如果不了解您存储的数据,就不可能说。如果你想知道什么是最有效的,你需要对你的数据进行一些基准测试和测量。哦,有趣的是,这在Firestore中是可能的,我还从来没有听说过,你有任何文档参考让我阅读吗?先谢谢你,恐怕我听不懂你的意思。但是您应该继续使用第一个数据库模式,其中内容是post文档中的一个属性。使用该选项,只涉及读取操作。一切正常吗,您解决问题了吗?您好,没有。不幸的是,我无法找到如何仅查询文档的特定部分。我现在了解您要查找的内容,但不幸的是,您无法仅查询特定部分,而是整个文档,或者什么都没有。请看一下我的答案,以便更好地理解。