内部字段

时间:2017-03-22 13:22:20

标签: android firebase firebase-realtime-database

在构建用于在firebase数据库中选择数据的查询时遇到一些困难。 我的数据库结构是这样的:

enter image description here

我需要获得所有有联系ghopper的用户。这里的结果是alovelace和eclarke。但我真的不知道如何用Java做这个简单的查询。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您将使用Firebase数据库查询:

    private String getTableDDL(final Class<? extends GlassContract.Table> table) {
    return getTableDDL(table, GlassContract.getTableName(table));
}

private String getTableDDL(final Class<? extends GlassContract.Table> table, String tableName) {
    final StringBuilder sql = new StringBuilder(128);
    sql.append("create table ").append(tableName).append(" (");
    for (final Field field : table.getFields()) {
        if (field.getName().startsWith("_") || field.isAnnotationPresent(Deprecated.class))
            continue;
        try {
            sql.append(field.get(null));
        } catch (Exception ignore) {
        }
        try {
            final Field type = table.getDeclaredField("_SQL_" + field.getName() + "_TYPE");
            sql.append(' ').append(type.get(null));
        } catch (Exception ignore) {
            sql.append(" TEXT");
        }
        sql.append(',');
    }

    try {
        final Field type = table.getDeclaredField("_PK_COMPOSITE");
        sql.append("PRIMARY KEY(").append(type.get(null)).append(")");
        sql.append(',');
    } catch (Exception ignore) {
        // ignore
    }
    try {
        final Field type = table.getDeclaredField("_UNIQUE_COMPOSITE");
        sql.append("UNIQUE(").append(type.get(null)).append(")");
        sql.append(',');
    } catch (Exception ignore) {
        // ignore
    }

    sql.setLength(sql.length() - 1); // chop off last comma

    sql.append(')');
    Log.v(TAG, "DDL for " + table.getSimpleName() + ": " + sql);
    return sql.toString();
}

但这要求您为每个用户定义一个索引,该索引不能扩展。这是因为你现在拥有的结构意味着可以轻松地确定聊天室的用户,而你正在尝试相反的事情。

为了有效地允许用户获取聊天室,您应该构建数据,以便保留每个聊天室的用户列表。这通常被称为次要/反向/倒置索引。

有关此内容的更多示例,请参阅: