Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从两个相关集合查询数据的最干净的解决方案是什么?_Javascript_Firebase_Google Cloud Firestore - Fatal编程技术网

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文档中的一个属性。使用该选项,只涉及读取操作。一切正常吗,您解决问题了吗?您好,没有。不幸的是,我无法找到如何仅查询文档的特定部分。我现在了解您要查找的内容,但不幸的是,您无法仅查询特定部分,而是整个文档,或者什么都没有。请看一下我的答案,以便更好地理解。