【问题标题】:How to query last 7 days' data from Firestore Android如何从 Firestore Android 查询过去 7 天的数据
【发布时间】:2019-02-15 17:04:49
【问题描述】:

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

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    我正在使用 Firestore 的服务器时间戳,也以毫秒为单位存储时间。

    因此,如果您以毫秒为单位存储时间戳,那么您做错了。

    如何查询最近 7 天创建的数据。

    为了能够根据时间段查询您的数据库,您的时间戳属性应该是 o 类型 Date 并且 长。要了解如何实现这一点,请查看我在 post 中的回答。

    正确设置属性后,如下所示的查询应该可以解决问题:

    IOTransactions.whereLessThan("timestamp", now).whereGreaterThan("timestamp", sevenDayAgo);
    

    其中nowsevenDayAgo 是两个Date 对象,分别代表当前时间和7 天前的某个时刻。

    【讨论】:

    【解决方案2】:

    据我所知,您还可以使用以下查询来获取结果

    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() 方法之前。

    end at 在 orderBy 中搜索所有包含 end at 字段值的文档

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      相关资源
      最近更新 更多