关于 Firestore 中的定价,对文档的查询如何工作?

问题描述

假设我在 Firestore 中有一个集合,用于存储我的应用程序中所有用户的“故事”,并且假设我在其中保存了一千个故事,但我希望每个用户在他/她单击某个按钮时只检索他/她自己的故事(不是全部)。我实际上是通过在我的应用程序中使用此代码来做到这一点的

db.collection("stories")
        .whereEqualTo("userID",uidOfCurrentUser)
        .get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        Log.d(TAG,document.getId() + " => " + document.getData());
                    }
                } else {
                    Log.d(TAG,"Error getting documents: ",task.getException());
                }
            }
        });

我担心的是:Firebase 会将此循环视为对每个文档的读取吗?换句话说,每次用户单击该按钮时,他们会向我收取 1000 次阅读费用吗? (如果是这样的话,那就太可怕了)

假设用户在这 1000 个故事中只有 2 个文档,他们会将其计为 2 次阅读还是 1000 次?处理这种情况的最佳解决方案是什么?

解决方法

对于 firestore,您只需为接收或更改/删除的数据付费。数据库中有多少并不重要。

如果您的数据库中有 1000 个故事,但您的 query 只会给您 2 个,您只需为这 2 个付费。

您可以阅读更多相关信息here

enter image description here

除了自动查询之外,您还应该检查您的查询是否需要创建和索引。您可以阅读有关 here 的更多信息。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...