【问题标题】:Firestore query documents by birthday date, like only query by day and month exclude year?Firestore 按生日日期查询文档,例如仅按日和月查询不包括年份?
【发布时间】:2019-10-23 08:08:46
【问题描述】:

我有用户集合,其中每个用户都包含其birthday 归档为Timestamp,所以现在我想查询生日是今天的用户,那么我如何只查询daymonth 因为在这种情况下year 无关紧要。

所以我知道我们只能像 firestore.collection("user").whereEqualTo("birhtday", todaysDate) 这样按日期搜索,但我们知道它不会返回任何内容,因为它也会匹配 year

那么这里最好的解决方案是什么?

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    由于将Date 对象作为第二个参数传递给以下查询:

    firestore.collection("user").whereEqualTo("birhtday", todaysDate);
    

    返回今天生日的所有用户,需要添加新属性。在这个新属性中,您可以简单地将日期存储为字符串格式的日期和月份:

    shortBirhtday: "09-Jun"
    

    然后使用以下命令查询数据库:

    firestore.collection("user").whereEqualTo("shortBirhtday", "09-Jun");
    

    此查询将返回所有生日为 6 月 9 日的用户,无论年份。

    编辑:

    根据@DougStevenson 的评论,存储日期更合适的方式应该是:

    09-06
    

    09 代表日期,06 代表月份。这是相应的查询:

    firestore.collection("user").whereEqualTo("shortBirhtday", "09-06");
    

    【讨论】:

    • 是的,目前看来这是唯一的解决方法,我还计划在用户文档中为 daymonth 添加两个字段。
    • 是的,这是一个很常见的解决方案。我认为没有必要添加两个属性,因为只有一个人愿意做这项工作;)
    • 嗯,我也认为我必须创建一个,因为对于两个我想我必须创建索引(不确定)
    • 如果您将使用两个属性,则只有在对结果进行排序时才需要索引,否则不需要索引。但为了简单起见,最好只使用一个属性。
    • 感谢@DougStevenson 和 Alex,我已经使用数字表示月份和日期。
    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2020-07-10
    相关资源
    最近更新 更多