在 Firestore 中仅按键查找文档

Find document by key only, in Firestore

我目前正在转换我的 Firebase 实时实时数据库以使用新版本 Firestore。

我想按键查找文档。以前,在 Firebase 实时我可以做这样的事情:

getSingleRouteById (key) {
   const ref = firebaseDb.ref('/data/')
   // now search for data with that key several nested layers down
   return ref.child(key)
      .once('value')
      .then((snapshot) => {
         return snapshot.val()
     })
}

阅读新文档后,我找不到在 Firestore 中实现此目的的方法。请注意,我只知道密钥,所以我需要搜索所有文档,而不知道实际的 path/reference.

没有本地方法可以做到这一点。部分问题是跨多个路径的键没有唯一性,因此在 /data/ 中查找键 'key' 时,您可能有 /data/123/key/data/231/key,这意味着有多个可能的答案。

实现此目的的唯一方法是创建您自己的倒排索引。每当您 create 一个文档时,使用 Cloud Functions 自动将文档添加到 /keys/ 并更新一个名为 paths 的字段以包含密钥的完整路径。 paths应该是地图。

您可以通过侦听该事件并更新倒排索引来支持删除。

对于上面的示例,您将在 /keys/ 中有一个包含以下内容的文档:

Id: key
paths: {'/data/123/key' = true,
        '/data/231/key' = true}