Firestore从文档的内部数组中获取数据。

13 浏览
0 Comments

Firestore从文档的内部数组中获取数据。

我知道如何查询简单的集合/文档,像这样:

const querySnapshot = await 
this.authenticationProvider.firestoreDb.collection("members").where("userId", 
"==", this.authenticationProvider.user.uid).get();

但是我能否通过对firestore上的条件来获取内部数组的数据呢?你可以看到我需要检查projects/memberList数组,然后需要搜索email。我能做到吗?

enter image description here

0
0 Comments

问题:Firestore如何从文档的内部数组中获取数据?

原因:Firestore不支持直接从数组中获取数据。需要将数据结构化为对象,其中每个键都是userId。这样,Firestore将对对象键进行索引,使您能够对其运行查询。

解决方法:将数据结构化为对象,其中包含每个userId的键,并在其中嵌入其他数据。然后可以运行相应的查询语句来获取所需的数据。

示例代码如下:

const userId = this.authenticationProvider.user.uid
ref.collection('members').where(`memberList.${userId}`, '==', true)

甚至可以嵌入其他数据在每个userId键下,然后按照该用户是成员的顺序获取所有文档。

示例代码如下:

ref.orderBy(`memberList.${userId}`)

如果要动态更新membersList,可以使用事务进行操作。示例代码如下:

db.collection('members').doc('id').update({ 'memberList.${userId}' : true })

如果需要解决嵌套对象动态键的更新字段问题,可以参考以下链接中的解决方案:

Cloud Firestore: Update fields in nested objects with dynamic key

以上就是关于从Firestore文档的内部数组中获取数据的原因和解决方法的说明。

0