从数组中获取 Firestore 对象属性
Get Firestore Object Attributes From Array
我曾经有一个结构如下的文档:
旧文档:
members:
['userId1', 'userId2', 'userId3']
然后我编写了一个查询来检索与用户相关的所有文档:
const docsSnapshot = await getDocs(query(
collection(db, 'organisations'),
where('members', 'array-contains', user.uid)
))
效果很好,但现在我需要将用户名存储在:
members:
[{ id: 'userId1', name: 'John Smith' }, { id: 'userId2', name: 'Jane Smith' }]
我面临的挑战是我不确定如何构建一个查询来产生与第一个查询相同的结果 - 即,我如何检索任何对象具有 id
属性对应user.uid
.
我尝试使用:where('members.id', '==', user.uid)
,但没有用。
可以构造一个查询来执行此操作吗?
Firestore 不擅长这类查询...我会考虑将您的成员数组重组为一个以 user.id 作为键的对象。
members : {
userId1: { name: "fred" },
userId2: { name: "martha" }
}
另一种方法,也许更接近于 Firestore 'wants' 你的做法,是创建另一个子集合 members
,为每个成员创建一个新文档 doc.id 设置为 user.id.
这种方法还允许您轻松地向每个成员添加更多数据,并具有对成员进行查询的额外好处,而不仅仅是依赖 user.id。
我曾经有一个结构如下的文档:
旧文档:
members:
['userId1', 'userId2', 'userId3']
然后我编写了一个查询来检索与用户相关的所有文档:
const docsSnapshot = await getDocs(query(
collection(db, 'organisations'),
where('members', 'array-contains', user.uid)
))
效果很好,但现在我需要将用户名存储在:
members:
[{ id: 'userId1', name: 'John Smith' }, { id: 'userId2', name: 'Jane Smith' }]
我面临的挑战是我不确定如何构建一个查询来产生与第一个查询相同的结果 - 即,我如何检索任何对象具有 id
属性对应user.uid
.
我尝试使用:where('members.id', '==', user.uid)
,但没有用。
可以构造一个查询来执行此操作吗?
Firestore 不擅长这类查询...我会考虑将您的成员数组重组为一个以 user.id 作为键的对象。
members : {
userId1: { name: "fred" },
userId2: { name: "martha" }
}
另一种方法,也许更接近于 Firestore 'wants' 你的做法,是创建另一个子集合 members
,为每个成员创建一个新文档 doc.id 设置为 user.id.
这种方法还允许您轻松地向每个成员添加更多数据,并具有对成员进行查询的额外好处,而不仅仅是依赖 user.id。