Firestore使用数据库/服务器时间进行查询

时间:2018-11-13 14:59:21

标签: javascript firebase google-cloud-firestore

我在Firestore中有一个collection,其中包含接下来365天的字符串。实际上,这是我们的应用在特定日期需要显示的代码字。

我们注意到,如果用户更改日期并返回到应用程序,则Firestore会正确返回当天的代码字,因为我们的查询使用今天的日期来查询代码字。

以前,我们在服务器上有一个定制的API,该API会根据服务器的时间进行提取,以确保不会发生这种情况。

用Firestore复制此行为的最佳方法是什么?我能想到的唯一方法是停止每天将所有数据存储在数据库中并从服务器托管文件中注入数据。这可能是最好的方法,但想在选择此解决方案之前提出问题。

这是我们当前的查询

const codeword = await firebase
  .firestore()
  .collection('emoji')
  .where('valid_from', '>=', new Date())
  .limit(1)
  .orderBy('valid_from', 'asc')
  .get();

// today's codeword is "whatever" based on the client time
// ... can I use the server's time instead?

1 个答案:

答案 0 :(得分:1)

您不能在查询中使用服务器的时间,因为查询的值必须来自客户端。但是您可能可以保护数据,使其仅允许用户读取“今天”的数据。而且由于您可以在Firestore的服务器端安全规则中执行此操作,因此可以在其中使用服务器端时间戳。

可以使用query-filter based on document fieldsrequest.time字段保护您当前的查询。

您还可以考虑进行上述查询,并且每个日期只创建一个文档,即具有2018-11-13之类的ID,然后:1)让客户今天请求文档,2)限制对该文档的访问安全规则中的特定文档。