gpt4 book ai didi

javascript - 对 documentId 的 Firestore 集合组查询

转载 作者:搜寻专家 更新时间:2023-11-01 05:08:49 25 4
gpt4 key购买 nike

在我的场景中,用户可以“喜欢”另一个用户的个人资料。因此,我为每个用户创建了一个名为“likedBy”的子集合,我在其中为特定用户创建了一个文档,例如:

users(col) -> User A(doc) -> likedBy(col) -> User B (doc), User C (doc)



所以在用户被删除的罕见情况下,我想删除该用户的所有喜欢问题。

我只是不确定这是否可能(解决方法可能是在所述文档中再次保存 userId 并查询)。

我基本上正在寻找的是这样的:
db.collectionGroup('likedBy').where(firebase.firestore.FieldPath.documentId(), '==', "User A").get();

问题是,我无法在 Firestore 控制台中为 documentId 创建索引。

最佳答案

您无法使用以下查询:

db.collectionGroup('likedBy').where(firebase.firestore.FieldPath.documentId(), '==', "User A").get();

这是因为集合组查询仅适用于文档属性和 不是 关于文档 ID。根据关于 collection group queries的官方文档:
db.collectionGroup('landmarks').where('type', '==', 'museum');

您查询了 landmarks子集所在 type属性的值是 museum .

解决方法可能是将用户的 id 存储在数组中并使用 array-contains但请记住,对于您使用的每个集合组查询,您都需要一个索引,不幸的是您无法以编程方式创建这样的索引。即使您可以在 Firebase 控制台中创建索引,它也无济于事,因为您是动态获取这些 id 的。所以不是为每个用户单独创建索引的选项,因为你会到达 maximim number of indexes很快。

Maximum number of composite indexes for a database: 200



要解决此类问题,您应该考虑在每个用户对象下添加一个数组并使用如下查询:
usersRef.where("usersWhoLikedMe", "array-contains", "someUserId")

哪里 usersWhoLikedMe是数组类型的属性。

关于javascript - 对 documentId 的 Firestore 集合组查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56149601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com