【问题标题】:Firebase Firestore - differences between mobile and web SDKFirebase Firestore - 移动 SDK 和 Web SDK 之间的差异
【发布时间】:2018-07-27 20:55:58
【问题描述】:

我想知道 SDK 之间的差异来自哪里。 例如,我有一个新闻列表。我对其执行两个操作:刷新并下载第一个或下一个偏移量。 当我使用移动 SDK 时,我会调用它来刷新:

FirebaseFirestore.getInstance().collection("news")
.whereEqualTo("categories.finance", true)
.whereEqualTo("locale", "pl")
.orderBy("timestamp", Query.Direction.DESCENDING)
.limit(15)
.endAt(1518554580)
.get()

它将返回最新消息。但如果我要在云函数上执行它:

admin.firestore().collection('news')
.where('categories.finance', '==', true)
.where('locale', '==', language)
.limit(15)
.orderBy('timestamp', 'desc')
.endAt(1518554580)
.get()

我得到一个空列表。 这同样适用于下载偏移量。查询看起来像上面有一个区别 - 我使用的是 startAfter(1518554580)。

为什么会这样?有没有办法解决这个问题?

【问题讨论】:

  • 你能显示整个查询,而不仅仅是过滤部分吗?您可能正在查询两个不同的集合 - 在这里无法分辨。此外,这里无法说出 language 是什么,但您已将其硬编码到另一个中。
  • timestamp的数据类型是什么?
  • @DougStevenson 这是号码 - 在 android 上很长
  • 如果你不过滤,只是一个简单的.get() ref,你能在云函数中获取数据吗?只是想确保查询是问题所在。
  • @JenPerson 我刚才查了一下,如果我关闭过滤器,查询会返回最后 15 个元素。

标签: android node.js firebase google-cloud-firestore


【解决方案1】:

我知道为什么会这样。 出于某种原因,具有降序时间戳的复合索引适用于移动设备,但对于 Web,它在索引升序时起作用。 因此,我必须为每个类别设置两个索引。

【讨论】:

  • Firestore 仍是测试版产品,您似乎在 Web SDK 中发现了一个错误。我推荐filing a bug report 以便尽快解决此问题,并且每个类别都不需要 2 个索引。
猜你喜欢
  • 2019-07-04
  • 2019-02-10
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 2018-08-18
  • 2011-02-27
  • 2019-02-10
  • 1970-01-01
相关资源
最近更新 更多