firebase 如何检索与firestore的唯一ID?

nkkqxpd9  于 2023-11-21  发布在  其他
关注(0)|答案(2)|浏览(110)

我正在使用两个Firestore集合:

  • “sold-items”,其中每个文档都有两个字段“sellerId”(销售人员的ID)和“buyerId”(买家的ID)。
  • 和“sellers-xyz”,其中每个卖家都有“userId”。

我需要检索(API调用)每个卖家的“sold-items”中的所有唯一买家,由于“sold-items”集合非常大(大约500000个文档),我需要应用分页。我最初的方法是读取“sold-items”中的“sellerId”等于“userId”(从“sellers-xyz”)并获取“buyerId”,但我如何才能只检索唯一买家?
例如-第1页的API返回20个唯一的buyerIds,然后用户转到第20页,由于API是无状态的,我无法知道哪些“buyerIds”以前已经返回,在这种情况下,我可能会一次又一次地返回相同的“buyerIds”。
我似乎无法找出最佳的最佳解决方案,为这项任务,任何意见是非常感谢。

nvbavucw

nvbavucw1#

你所描述的听起来像是一种group-by子句,Firestore不支持。
如果你想让Firestore返回唯一的买家ID,你需要在某个地方存储唯一的买家ID。这几乎是所有Firestore操作的本质,也是它伸缩性如此之好的原因之一。
如果您不想存储(额外的)数据来跟踪唯一的买家ID,请考虑使用具有更强查询功能的数据库来满足您的要求。

jvlzgdj9

jvlzgdj92#

正如@FrankvanPuffelen在他的回答中提到的:
您需要将唯一的买家ID存储在某个地方。
为此,我建议您使用以下解决方案之一。
1.将所有买家ID存储在Firestore文档中的数组中。这意味着所有买家ID将根据定义是唯一的,因为当您使用array-union操作符时,您无法添加重复的ID。
1.将所有买家ID存储在Firebase实时数据库中。由于节点由键值对表示,因此您可以将键设置为买家ID,将值设置为布尔值true。这意味着您将始终拥有唯一的买家ID,因为如果您尝试使用已经存在的买家ID创建键,则该键将被覆盖。此外,实时数据库中的写入操作是免费的。
还请记住,denormalization是一个非常常见的做法,当涉及到NoSQL数据库,如Firestore或实时数据库。

相关问题