Firestore按时间范围按字段排序

时间:2020-05-15 16:02:11

标签: flutter google-cloud-firestore

我在flutter应用程序中使用firestore。 我有一个帖子集。每个帖子都有很多点赞,以及创建日期。 我想获得上周,上一天,上个月最喜欢的帖子... 所以我必须在时间上做一个isGreaterThanOrEqualTo并按喜欢排序。但这是不可能的,因为我无法在两个领域进行排序。 为了解决这个问题,我已经在我的过帐文档3字段中添加了:“月”(月号),“周”(周号),“天”(天号)。

我的查询就像:

Query query = firestore.collection("post");
query = query.where("month", isEqual: 3);
query = query.orderBy("like", descending: true);
QuerySnapshot data = await queryResult.getDocuments();

效果很好。但是我想要过去30天内最喜欢的帖子,而不是特定月份。而且我不知道是否可以用firestore做到这一点。 获取所有文档,然后再进行排序对我来说不合适。

这个问题有解决方案吗?

1 个答案:

答案 0 :(得分:1)

道格已经证实了这件事的可能性。 我打算做的很简单。我将保持字段的日,月状态,并添加一个字段“ timeRange”(该字段的取值范围为1到10,以查找一天中问题的大致时间)。 我将使用“ IN”查询,该查询仅限于10个字段。

例如,如果我想要最近24小时的问题,我可以这样做: (在这个例子中,我想我们实际上在timeRange 5中)

查询当天的帖子:

Query query = firestore.collection("post");
query = query.where("day", isEquals: currentDay);
query = query.where("timeRange", inArray: [0,1,2,3,4,5]);
query = query.orderBy("like", descending: true);
QuerySnapshot data = await queryResult.getDocuments();

查询昨天的帖子

Query query = firestore.collection("post");
query = query.where("day", isEquals: yesterday);
query = query.where("timeRange", inArray: [10,9,8,7,6]);
query = query.orderBy("like", descending: true);
QuerySnapshot data = await queryResult.getDocuments();

如果有人对此解决方案有任何评论,欢迎您。