Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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
Node.js Firestore系列设计的问题_Node.js_Firebase_Google Cloud Firestore - Fatal编程技术网

Node.js Firestore系列设计的问题

Node.js Firestore系列设计的问题,node.js,firebase,google-cloud-firestore,Node.js,Firebase,Google Cloud Firestore,我在firestore数据库中有一个评论部分的设计,我只是在努力解决其中的一部分。我试图在读/写次数方面提高效率,以节省成本 计划是为我们评论的项目创建一个集合,其中包含一个文档。在里面,我将有一个文档的子集合,每个文档将是一个块,其中包含一个数组和50条注释。当前块编号将存储在父文档中,与子集合处于同一级别 +Doc1 -Block num : 1 -Subcollection + 0 : Array of 50 comments

我在firestore数据库中有一个评论部分的设计,我只是在努力解决其中的一部分。我试图在读/写次数方面提高效率,以节省成本

计划是为我们评论的项目创建一个集合,其中包含一个文档。在里面,我将有一个文档的子集合,每个文档将是一个块,其中包含一个数组和50条注释。当前块编号将存储在父文档中,与子集合处于同一级别

+Doc1
     -Block num : 1 
     -Subcollection
                  + 0 : Array of 50 comments  
                  + 1 : Array of 50 comments 
                   etc 
所以我希望每条评论都有特定的属性,例如id、评论文本、用户名和2个喜欢/不喜欢它的用户数组

通过这种方式,我可以根据最近的评论进行排序,因为我只需要向后阅读这些块

我的问题是,我想按最喜欢或不喜欢的评论排序。。。就像现在一样,每个区块都可以有大量喜欢的评论

有没有一种方法可以使这篇文章结构化,或者是通过制作一个新的集合,或者是调整这篇文章,这样我就不必按照喜欢的数量来阅读每一块文章了

另外,如果有人知道我的设计有任何缺陷,请毫不犹豫地提出改进建议

提前感谢您的帮助:

--编辑


对不起,伙计们,我忘了提一下,我想避免把每一条评论都做成文档,因为阅读大量内容会花费很多钱

为了能够在所有评论中使用Firestore查询,每个评论必须是一个单独的文档。因为您明确排除了该选项,所以不能依靠Firestore查询来实现用例

在这种情况下,下一个选项通常是找到一个允许您的用例的数据模型。例如,如何根据文档的投票数将注释分片到文档上?因此,排名前50位的最受欢迎评论出现在document1中,接下来的50位出现在document2中,以此类推。这样,您可以在单个或最多几个文档中获得最受欢迎的评论


请注意,这将导致编写投票的代码相当复杂,并且可能需要在文档中随意添加注释。这是您必须做出的权衡:额外的复杂性和时间成本是否值得您通过减少读取操作而节省的成本?

嗨,弗兰克,我喜欢您的想法。你认为让一个云函数处理upvote/downvote可行吗?那么我只需在中读取所有评论块/碎片,并将它们组合成一个大js数组。递增/递减需要更改的注释和数组中的值。然后根据每50条注释切掉数组,并将它们设置为firebase上的文档。我还将为最新的评论保留一个单独的集合,有效地复制数据,并将根据用户界面中的选择切换他们从哪个集合中读取。我们这里讨论的是代码,所以所有可能都是可能的。它是否可行是主观的。我认为您将用大量的时间和代码复杂性换取相对较小的节省。但是如果你说节省下来的钱不小而且值得,你同样是对的。我考虑了一下,我认为这是值得的。。。谢谢你的帮助。对不起,弗兰克。我还有一个问题。如果您有Document->Collection->Document,并且您阅读了子集合文档,这将是多少次阅读?我将使用的引用是db.collection'parentCollection'.docparentDoc.collectionsub collection.docsub collection doc;。。。这是我们刚刚收到的子收款单,还是父收款单和子收款单?