在Firestore中仅按密钥查找文档

时间:2018-01-17 15:24:58

标签: firebase database-design firebase-realtime-database data-modeling google-cloud-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中实现此目的的方法。请注意我只知道密钥,因此我需要搜索所有文档,而不知道实际的路径/参考。

1 个答案:

答案 0 :(得分:1)

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

实现这一目标的唯一方法是创建自己的倒排索引。每当您create文档时,请使用“说明云功能”自动将文档添加到/keys/,其ID为密钥,并更新名为paths的字段以包含密钥的完整路径。 paths应该是地图。

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

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

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