gpt4 book ai didi

android - 如何从 Android 应用程序比较 Firebase 数据库中的一组值?

转载 作者:行者123 更新时间:2023-11-29 01:12:45 25 4
gpt4 key购买 nike

我的应用程序具有以下 JSON 结构。

root
|
+-- groups
| |
| +-- $gid
| |
| +-- uids : [$uid1, $uid2,....,$uidN]
|
|
+-- users
|
+-- $uid
|
+-- name: "<name>",
status: "<status>",
avatar: "<url>"

如何找到匹配指定uid的gid?

我尝试的方法是将所有 uid 连接在一起,中间使用下划线。

String mGroupId = mGroupRef.push().getKey();
mGroupRef.child(mGroupId).setValue(new GroupModel(user1.getUid(), user2.getUid()));

class GroupModel {
private static final String SEPARATOR = "_";
private String uids;

public GroupModel(String uid, String uid1) {
uids = uid + SEPARATOR + uid1;
}
}

显然,这不是一部好作品。

因为 uid 的顺序未定义,这个问题使得找到 gid 变得非常困难。

任何想法或帮助将不胜感激。

最佳答案

Firebase 查询只能包含一个 orderBy/filter 子句。如果您想搜索多个条件,则需要找到一种方法将条件的值组合到一个属性允许查询的数据模型中。

在您的场景中,将 UID 组合成一个字符串对我来说似乎是最直接的映射。只需按字母顺序对 UID 进行排序(或保证它们始终处于相同顺序的任何方式),然后连接字符串。

我之前在 Best way to manage Chat channels in Firebase 中写过这个,其中还包含一个可运行的代码 fragment 。

如果群组由其成员定义(在许多聊天场景中都是如此),那么您甚至可以使用串联的 UID 作为房间 key 。如果您有很多成员,该 key 可能会比 Firebase 允许的长度更长,因此在这种情况下最好使用串联 UID 的哈希值。

最后:在 Firebase 数据库中使用数组通常是一种代码味道。每个用户只能成为一个组的成员一次。但是一个数组可以多次包含相同的 UID。当您对数组执行 contains() 调用时,您通常会模仿一个集合:一个具有唯一成员的集合。在 Firebase 数据库中,您可以将集合建模为:

members: {
uid1: true,
uid2: true,
uid3: true
}

通过这种结构,您可以保证每个 UID 只能出现一次,您不需要代码来确保这一点。 true 值是必需的,因为 Firebase 数据库无法存储没有值的键。

关于android - 如何从 Android 应用程序比较 Firebase 数据库中的一组值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41799777/

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