小编And*_*lva的帖子

从 Firestore Collection Group 查询中获取父母,而不检索儿子

我正在设计一个 Firestore 数据库,想知道以下架构的成本影响......

按照云 Firestore 教程,让我们想象一下这种架构:“餐厅”集合有一个“评论”子集合。就像是:

--Restuarants
   --My Restaurant
      --Reviews
         --My Review 1, through n
Run Code Online (Sandbox Code Playgroud)

我有兴趣查询评论子集合,但是我对评论本身并不真正感兴趣,而是对餐厅感兴趣。

举例来说,在这样的查询中,我实际上对2019 年 8 月 1 日至少发布了一篇评论餐厅Get all reviews posted on August 1st 2019感兴趣。IE。我想拿回餐厅的文件,而不是评论

这篇文章这篇文章来看,我的实现可能看起来像这样:

--Restuarants
   --My Restaurant
      --Reviews
         --My Review 1, through n
Run Code Online (Sandbox Code Playgroud)

通过这个实现,我将获取所有“儿子”(即所有评论)。这有几个缺点:

  • 成本。例如,一家餐厅可能在 2019 年 8 月 1 日发布了 1000 条评论;我将按 1001 次阅读付费(1000 条评论 + 我感兴趣的实际父文档)。
  • 数据消耗。我的用户将从服务器检索的数据比实际需要的数据多得多。

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

谢谢!

database-design firebase google-cloud-firestore

6
推荐指数
1
解决办法
2909
查看次数

用于导入模块时,Python 上 __init__ 中 __all__ 的行为

我有一个以下形式的python包:

package
??? __init__.py
??? module_1.py
??? module_2.py
Run Code Online (Sandbox Code Playgroud)

在 __init__.py 里面我有:

package
??? __init__.py
??? module_1.py
??? module_2.py
Run Code Online (Sandbox Code Playgroud)

Module_1 是:

__all__ = ["module_1", "module_2"]
Run Code Online (Sandbox Code Playgroud)

Module_2 是:

__all__ = ["foo"]
def foo(): pass
Run Code Online (Sandbox Code Playgroud)

文档中我认为以下代码将导入fooBar

__all__ = ["Bar"]
class Bar: pass
Run Code Online (Sandbox Code Playgroud)

但是,当我运行pk.foo()它时会引发错误:(AttributeError: module 'package' has no attribute 'foo'对于 Bar 也是如此)。

感谢这个答案,我知道要获得所需的行为,我可以将 __init__.py 更改为:

import package as pk
Run Code Online (Sandbox Code Playgroud)

以上工作。

但是,我不明白 文档。线路:

如果一个包的 __init__.py 代码定义了一个名为 __all__ 的列表,它被认为是遇到 from package import …

python python-3.x

5
推荐指数
2
解决办法
113
查看次数