gpt4 book ai didi

firebase - 从 Firestore 集合组查询中获取 parent ,而无需检索儿子

转载 作者:行者123 更新时间:2023-12-04 04:01:32 25 4
gpt4 key购买 nike

我正在设计 Firestore 数据库,并且想知道以下架构的成本影响...
按照 Cloud Firestore 教程,让我们想象一下这种架构:“餐厅”集合有一个“评论”子集合。就像是:

--Restuarants
--My Restaurant
--Reviews
--My Review 1, through n
我有兴趣查询评论子集, 但是 我对评论本身并不感兴趣,而是对餐厅感兴趣。
因此,例如,在像 Get all reviews posted on August 1st 2019 这样的查询中我其实对 感兴趣餐厅 至少一篇评论发表于 2019 年 8 月 1 日 . IE。 我想取回餐厅的文件,而不是评论 .
来自 this postthis看起来我的实现可能看起来像这样:
    QuerySnapshot myQuerySnapshot = await Firestore.instance.collectionGroup('reviews')
.where('reviewDate', isEqualTo: '20190801').snapshots().first;
List<DocumentSnapshot> myDocumentSnapshots = myQuerySnapshot.documents;

myDocumentSnapshots.asMap().forEach((index, son) {
snapshot.reference.parent().parent().get().then((parent) {
print("Printing snapshot: $index");
print("son id: "+son.documentID);
print("parent id: "+parent.documentID); //I could then retrieve the parent data.
});
});
通过此实现,我将获取所有“儿子”(即所有评论)。这有几个缺点:
  • 费用 .例如,一家餐厅可能在 2019 年 8 月 1 日发布了 1000 条评论;我将被收取 1001 次阅读(1000 条评论 + 我感兴趣的实际父文档)的费用。
  • 数据消费 .我的用户会从服务器中检索比实际需要更多的数据。

  • 有一个更好的方法吗?有没有办法避免获取评论并只获取父文档?
    谢谢!

    最佳答案

    当您查询评论集合时,无法找回餐厅。因此,您正在做的是在不更改数据模型的情况下获得餐厅的唯一方法。
    像往常一样处理 NoSQL 数据库时,最好修改您的数据模型以更好地适应这种用例。我能想到的快速替代方法是保留一个数组 datesWithReviews在餐厅文档中,每当您向 reviews 添加评论时都会更新该文档。那家餐厅的子集。如果您使用 array-union操作来更新数组,您可以在为某个日期添加评论时更新餐厅,而不会在数组中出现重复的日期。
    通过每个餐厅文档中的该字段,您可以查询包含该日期的所有餐厅。如果您将日期存储为简单 "2020-07-19"字符串,该查询将如下所示:

    firebase.firestore().collection("restaurants").where("reviewDates", "array-contains", "2020-07-19")
    这类似于在 writing data in a transaction 上的 FriendlyEats 代码实验室步骤中添加评论时更新餐厅评级的方式。 .另请参阅 that step 的视频演练.

    关于firebase - 从 Firestore 集合组查询中获取 parent ,而无需检索儿子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62987772/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com