在 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}
我目前正在转换我的 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}