如何从Firestore Android查询最近7天的数据

时间:2019-02-15 17:04:50

标签: java android firebase google-cloud-firestore

我想查询最近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天创建的数据?

2 个答案:

答案 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字段值末尾的文档