android - 在嵌套的 HashMap 上 Firestore 多个 whereEqualTo

标签 android firebase google-cloud-firestore

考虑到多个 whereArrayContains() 不起作用,我在嵌套 HashMap 上使用多个 whereEqualTo() 时遇到问题。

我正在使用 firebase 制作简单的聊天应用程序,在某些时候,我需要确定两个用户 ID 是否存在来自 firestore 的聊天文档。我当前的聊天 Firestore 设置是:

chatId : {
    lastMessageText: string
    lastMessageTime: long
    memberIds: {
        userId1 : true
        userId2 : true
    }
}

我的代码是:

    chatsCollection
        .whereEqualTo("memberIds., + currentUser.getUsername() "true") // which is memberIds.userId1
        .whereEqualTo("memberIds." + opponentUser.getUsername(), "true")
        .get()
        .addOnCompleteListener(task -> {
            if (task.isSuccessful()) {
                if (!task.getResult().isEmpty()) {
                    // some logic
                }
            } else {
                Log.d(TAG, "Error getting documents: ", task.getException());
            }
        });

但总是返回空结果。我检查了 firestore,一切都在那里。我错过了什么?

提前致谢。

最佳答案

您的代码看起来像是在尝试将数据库中的 bool 值与字符串进行比较。如果数据库中有 bool 类型字段,则还应该在查询中使用 bool 类型值(而不是带引号的字符串)。始终确保类型匹配。

关于android - 在嵌套的 HashMap 上 Firestore 多个 whereEqualTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54544303/

相关文章:

java - 改造返回空对象

firebase - Firestore 批量写入与事务

android - GoogleSignInResult 使用 Firebase 在 Android 应用程序中返回 DEVELOPER_ERROR

typescript - Firestore snapshotChanges DocumentChangeType "removed"从未发送

java - 将数据传递给另一个 Activity

java - 如何调用 onTouch() 方法

ios - Firebase 云消息传递中是否有适用于 iOS 的 ttl "time to live"的替代方案?

database - 如何使用 flutter 更新 firestore 中所有文档的单个字段?

android - 菲律宾的 Cloud Firestore 位置推荐

android - NullPointer 试图在没有对话的情况下在 Facebook 上发布