Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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
Android 查询firestore,其中greaterThan()方法将所有数据作为读数计数_Android_Google Cloud Firestore - Fatal编程技术网

Android 查询firestore,其中greaterThan()方法将所有数据作为读数计数

Android 查询firestore,其中greaterThan()方法将所有数据作为读数计数,android,google-cloud-firestore,Android,Google Cloud Firestore,我正在使用firestore保存事务,并通过类似的时间戳字段查询数据 CollectionReference IOTransactions = db.collection(userID) .document("userData").collection("StockTransactions"); Query transactionsQuery = IOTransactions .whereLessThan("timestamp", dat

我正在使用firestore保存事务,并通过类似的时间戳字段查询数据

CollectionReference IOTransactions = db.collection(userID)
            .document("userData").collection("StockTransactions");

    Query transactionsQuery = IOTransactions
            .whereLessThan("timestamp", dateOfToday())
            .whereGreaterThan("timestamp", findDaysAgo())
            .orderBy("timestamp", Query.Direction.DESCENDING)
            .limit(20);
    transactionsQuery.addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@javax.annotation.Nullable QuerySnapshot queryDocumentSnapshots, @javax.annotation.Nullable FirebaseFirestoreException e) {
            if (e != null) {
                Log.w("FirestoreDemo", "Listen failed.", e);
                return;
            }
            for (DocumentChange dc : queryDocumentSnapshots.getDocumentChanges()) {
                switch (dc.getType()) {
                    case ADDED:
                        Log.d(TAG, "New city: " + dc.getDocument().getData() + " |||| " +queryDocumentSnapshots.);
                        String doc_id = dc.getDocument().getId();
                        transactionsList.add(dc.getDocument().toObject(StockTransaction.class));
                        break;
                    case MODIFIED:
                        Log.d(TAG, "Modified city: " + dc.getDocument().getData());
                        break;
                    case REMOVED:
                        Log.d(TAG, "Removed city: " + dc.getDocument().getData());
                        transactionsList.remove(dc.getOldIndex());
                        adapter.notifyItemRemoved(dc.getOldIndex());
                        break;
                }
            }
然后它只计算1,这是新添加的文档


我想查询时间戳,但如果我不能解决这个计数问题,我会改变我的代码

“它将所有文档都计算为读数,而不仅仅是新添加的文档”据我所知,您的代码没有进行任何计算。你能再解释一下你在这里的意思吗?或者:正在记录什么,您希望记录什么?每次添加新文档时,我都会检查google cloud的使用计数部分。如果我在查询中使用where子句,它将计为TransactionList.size(),但是如果我只删除where方法,它将只计为1。我知道日志不算代码中的任何内容,它们只用于检查是否有来自缓存的数据。对于isFromCache()方法,它显示为true。如果文档确实在服务器上读取,则仅对文档读取收费,因此这意味着文档确实在服务器上读取。对于未更改的文档,这种情况应每30分钟发生一次,因为客户端随后会针对服务器重新检查过时的数据(据我所知)。另请看,文档中说,我将只对不是来自缓存的查询结果收费,如果用户断开连接30分钟,查询也将工作。然而,我看到只有30次写操作的1.5k文档读取。在数据库仪表板中导航时,firestore支持的答案是,显示的文档也算作文档读取,但我在数据库中导航的次数不多,可能是3-4次,所以仪表板中的文档数可能是100。但它来自其他1.4k文档读取。如果只计算添加的项目和30分钟的检查,这是不可能的。根据我的经验,Firestore文档读取的计数一直是正确的,因此这些读取一定来自某个地方。在开发过程中,控制台确实是一个常见的源代码,重复的非缓存读取以及经常安排的进程(例如cron作业)也是如此。但是我们不可能确切地知道你的案子里读到的东西是从哪里来的。考虑停止使用你的应用程序和控制台一会儿,并检查使用率是否仍在上升。如果是这样的话,还有另一个客户在某处阅读。“它将所有文档都计算为阅读,而不仅仅是新添加的文档”,就我所知,您的代码没有进行任何计算。你能再解释一下你在这里的意思吗?或者:正在记录什么,您希望记录什么?每次添加新文档时,我都会检查google cloud的使用计数部分。如果我在查询中使用where子句,它将计为TransactionList.size(),但是如果我只删除where方法,它将只计为1。我知道日志不算代码中的任何内容,它们只用于检查是否有来自缓存的数据。对于isFromCache()方法,它显示为true。如果文档确实在服务器上读取,则仅对文档读取收费,因此这意味着文档确实在服务器上读取。对于未更改的文档,这种情况应每30分钟发生一次,因为客户端随后会针对服务器重新检查过时的数据(据我所知)。另请看,文档中说,我将只对不是来自缓存的查询结果收费,如果用户断开连接30分钟,查询也将工作。然而,我看到只有30次写操作的1.5k文档读取。在数据库仪表板中导航时,firestore支持的答案是,显示的文档也算作文档读取,但我在数据库中导航的次数不多,可能是3-4次,所以仪表板中的文档数可能是100。但它来自其他1.4k文档读取。如果只计算添加的项目和30分钟的检查,这是不可能的。根据我的经验,Firestore文档读取的计数一直是正确的,因此这些读取一定来自某个地方。在开发过程中,控制台确实是一个常见的源代码,重复的非缓存读取以及经常安排的进程(例如cron作业)也是如此。但是我们不可能确切地知道你的案子里读到的东西是从哪里来的。考虑停止使用你的应用程序和控制台一会儿,并检查使用率是否仍在上升。如果是的话,还有另一个客户在某处阅读。
Query transactionsQuery = IOTransactions
        .orderBy("timestamp", Query.Direction.DESCENDING)
        .limit(20);