首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带时间条件的Firestore按字段排序

带时间条件的Firestore按字段排序
EN

Stack Overflow用户
提问于 2020-05-16 00:02:12
回答 1查看 64关注 0票数 0

我在flutter应用程序中使用firestore。我收集了一些帖子。每个帖子都有一些赞,以及一个创建日期。我想得到最喜欢的帖子在过去的一周,最后一天,上个月…所以我必须在时间上做一个isGreaterThanOrEqualTo,然后按like排序。但这是不可能的,因为我不能对两个字段进行排序。实际上,为了解决这个问题,我在我的帖子文档3字段中添加了:“月”(月份编号),“周”(周编号),“天”(日编号)。

我的查询如下:

代码语言:javascript
运行
复制
Query query = firestore.collection("post");
query = query.where("month", isEqual: 3);
query = query.orderBy("like", descending: true);
QuerySnapshot data = await queryResult.getDocuments();

它工作得很好。但我想要的是过去30天内最受欢迎的帖子,而不是一个具体的月份。我不知道是否可以用firestore做到这一点。获取所有文档并在事后进行分类对我来说不是一个合适的解决方案。

有没有解决这个问题的办法?

EN

回答 1

Stack Overflow用户

发布于 2020-05-16 01:20:29

道格已经证实了这件事是不可能的。我想要做的很简单。我将保留我的字段day,month,并且我将添加一个字段"timeRange“(该字段将接受一个从1到10的值,以定位问题在一天中的大约小时)。我将使用"IN“查询,它被限制为10个字段。

例如,如果我想要过去24小时的问题,我会这样做:(在这个例子中,我想我们实际上是在timeRange 5中)

查询当天的帖子:

代码语言:javascript
运行
复制
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();

对昨天的帖子的一个查询:

代码语言:javascript
运行
复制
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();

如果有人对这个解决方案有什么意见,欢迎。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61823562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档