我在flutter应用程序中使用firestore。我收集了一些帖子。每个帖子都有一些赞,以及一个创建日期。我想得到最喜欢的帖子在过去的一周,最后一天,上个月…所以我必须在时间上做一个isGreaterThanOrEqualTo,然后按like排序。但这是不可能的,因为我不能对两个字段进行排序。实际上,为了解决这个问题,我在我的帖子文档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做到这一点。获取所有文档并在事后进行分类对我来说不是一个合适的解决方案。
有没有解决这个问题的办法?
发布于 2020-05-15 17:20:29
道格已经证实了这件事是不可能的。我想要做的很简单。我将保留我的字段day,month,并且我将添加一个字段"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();
如果有人对这个解决方案有什么意见,欢迎。
https://stackoverflow.com/questions/61823562
复制