【问题标题】:how to get docs after specific date time?如何在特定日期时间后获取文档?
【发布时间】:2020-11-30 19:09:39
【问题描述】:

我想在特定日期时间之后从集合中获取文档。

例子:

如果日期 = 2020 年 11 月 30 日上午 12:30(在 javascript 中)

  1. 查询应返回在上述日期之后创建的文档。
  2. 查询不应返回在上述日期之前创建的文档。

你可以看到我当前的代码:

await db
    .collection(`users/${user}/messages`)
    .orderBy("cDate", "desc") /* {cDate: firestore.Timestamp.fromDate(new Date())}*/
    .limit(100)
    .get();

任何帮助

【问题讨论】:

  • 不清楚您要在这里做什么,因为我们看不到您文档中的数据。但是您需要使用 where 子句根据需要过滤查询中的文档。如果您需要这方面的帮助,您应该编辑问题以更详细地解释文档的实际内容,以及您尝试如何过滤它们,如您在文档中所见:firebase.google.com/docs/firestore/query-data/…
  • @DougStevenson,我想很清楚,我只想在特定日期之后退回文件。示例:2020 年 11 月 30 日上午 12:00 之后。所以我的查询应该返回所有文档,如果它们是在此日期之后创建的,并且不应该在此日期之前返回这些文档
  • 您的文档中有日期属性吗?
  • 问题已编辑,请再看一遍
  • @AndresGardiol,是的,你可以看到cDate

标签: javascript firebase google-cloud-firestore react-native-firebase


【解决方案1】:

你可以这样做:

const isoDateTime = '2020-11-30T12:30:00';
await db
    .collection(`users/${user}/messages`)
    .where('cDate', '>=', isoDate);  //<--- Its important to have an ISO formatted date string
    .orderBy("cDate", "desc")
    .limit(100)
    .get();

有了这个你应该得到isoDate(包括)之后的所有文件。 您可以使用&gt; 不包括日期

【讨论】:

  • 非常感谢,这里是cDate 是firestore 日期吗?
  • 在您的 Firestore 文档中,您的 cDate 属性中应该有一个 ISO 日期时间字符串
  • 谢谢您,我会在检查您的答案后返回,如果有效则接受
  • 您可以在此处查看有关where 方法的更多信息firebase.google.com/docs/firestore/query-data/…
  • 能否请您告诉我为什么 ISO 日期很重要?
【解决方案2】:

如果您尝试根据时间戳类型字段过滤文档,您可以简单地提供一个 JavaScript 日期对象作为该字段的过滤器。

.where("cDate", ">", aJavaScriptDateObject)

您也可以使用 Firestore Timestamp 对象。

【讨论】:

  • 任何日期对象都支持它吗?
  • 示例:new Data().toISOString()
  • 不,那是字符串,不是日期对象。
  • 是否可以在 Firestore 中保存为 {cDate: new Date()}。如果是,orderBy 仍然有效吗?
  • 这样也保存了一个时间戳,可以和其他时间戳一起排序。
猜你喜欢
  • 1970-01-01
  • 2022-10-15
  • 2016-02-09
  • 1970-01-01
  • 2021-12-23
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多