Android 查询firestore,其中greaterThan()方法将所有数据作为读数计数
我正在使用firestore保存事务,并通过类似的时间戳字段查询数据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
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);