gpt4 book ai didi

android - map 包含字符串的 Firestore 查询

转载 作者:行者123 更新时间:2023-12-03 18:37:22 25 4
gpt4 key购买 nike

数据结构:

houses (collection)
name (string)
users (map)
90c234jc23 (map)
percentage: 100% (string/number)

规则:
allow read: request.auth.uid in resource.data.users;

问题是当我尝试查询用户拥有的房屋时:
FirebaseFirestore.getInstance().collection(House.COLLECTION)
// .whereArrayContains(House.USERS_FIELD, currentUser.getUid()) // does not work
.whereEqualTo("users." + currentUser.getUid(), currentUser.getUid()) // does not work either
.get()

不返回任何结果。

最佳答案

您无法在 Firestore 中执行此类查询,因为没有“map-contains-key”运算符。但是, 有非常简单的解决方法来实现它。对您的数据结构进行轻微调整 .
具体解决方案
需求:要使该解决方案起作用,每个映射值必须在 Firestore 查询中是唯一可识别的,这意味着它不能是映射或数组。
如果您的案例符合所列要求,您可以使用 @Dennis Alund's solution这表明了以下数据结构:

{
name: "The Residence",
users: {
uid1: 80,
uid2: 20
}
}
通用解决方案
如果您的 map 值是 map 或数组,您需要为每个值添加一个属性,该属性将在所有创建的此类型值中保持不变。这是一个例子:
{
name: "The Residence",
users: {
uid1: {
exists: true,
percentage: 80,
...
},
uid2: {
exists: true,
percentage: 20,
...
},
}
}
现在您可以简单地使用查询:
_firestore.collection('houses').whereEqualTo('users.<uid>.exists', true)
编辑:
@Johnny Oshika正确指出,您也可以使用 orderBy()按字段名称过滤。

关于android - map 包含字符串的 Firestore 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54018158/

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