我想查询最近7天的Cloud Firestore数据。我正在使用Firestore的服务器时间戳,还以毫秒为单位存储时间。
CollectionReference IOTransactions = db.collection(userID)
.document("userData").collection("StockTransactions");
Query transactionsQuery = IOTransactions.orderBy("timestamp",Query.Direction.DESCENDING);
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 (QueryDocumentSnapshot doc : queryDocumentSnapshots) {
if (doc.get("timestamp") != null)
transactionsList.add(doc.toObject(StockTransaction.class));
Log.d("Firestore", "Added item");
}
if(transactionsList.size() < 1 )
emptyTransactionsPage.setVisibility(View.VISIBLE);
Log.d("Firestore Reading", "Successfully fetched");
adapter.notifyDataSetChanged();
pb.setVisibility(View.INVISIBLE);
}
});
如何查询最近7天创建的数据?
答案 0 :(得分:1)
我正在使用Firestore的服务器时间戳,还以毫秒为单位存储时间。
因此,如果您以毫秒为单位存储时间戳,那是错误的。
如何查询最近7天创建的数据。
要能够根据时间段查询数据库,您的时间戳属性应为.build/x86_64-unknown-linux/debug/BigInt.build/Words and Bits.swift.o
,且不长。要了解如何实现此目标,请查看我在此 post 中的回答。
正确设置属性后,看起来像这样的查询就可以解决问题:
Date
其中IOTransactions.whereLessThan("timestamp", now).whereGreaterThan("timestamp", sevenDayAgo);
和now
是两个sevenDayAgo
对象,分别代表当前时间和7天前的某个时刻。
答案 1 :(得分:0)
根据我的知识,您还可以使用以下查询获取结果
Query query = mdb.collection("$YOUR_COLLECTION_NAME").orderBy("$YOUR_FIELD")
.whereGreaterThan("$YOUR_FIELD",$Begin_Date_Object)
.endAt($YOUR_DATE_OBJECT);
注意:您需要在endAt字段中声明一个 Java.Util.Date 对象。 orderBy必须始终在startAt()或endAt()方法之前。
末尾搜索所有包含orderBy字段值末尾的文档