whereEqualTo 是否支持 HashMap 相等性?

Does whereEqualTo support HashMap equality?

whereEqualToAPI可以将Any作为参数。这是否意味着我可以将 HashMap<K, V> 传递给它,它会将其匹配字段与 Firestore 数据库中 map 类型的字段进行比较,还是我必须手动比较每个 属性地图的?

我已经构建了一个这样的查询

collection.whereEqualTo("meta", hashMapOf( // <-- using full hash-map for matching
    "user" to "JD",
    "name" to "John"
))

其中 meta 是具有两个 key/value 对的 map 类型字段。

我要匹配的文档具有以下结构:

{
    "createdOn": as timestamp
    ...other properties
    "meta": as map
    {
        "user": "JD", as string
        "name": "John" as string
    }
}

我使用的标准应该会产生一些结果,但它没有(不会崩溃)所以我想知道我是否在其他地方犯了错误,或者这种类型的查询根本不受支持?结果为空。

我也可能只搜索 name 属性,使用像这样的更简单的查询来查找所有 Johns

collection.whereEqualTo("meta", hashMapOf( // <-- using parcial hash-map for matching

    "name" to "John"
))

它会只匹配 name 字段还是需要完整地图?

我的意思是,之前的查询应该有效还是我需要这样重写?

collection
    .whereEqualTo("meta.user", "JD")
    .whereEqualto("meta.name", "John")

Firestore 可以将客户端代码中的地图项与文档中的地图项进行比较。但是映射必须完全等效,因此您必须在代码中指定所有属性。所以这样的事情应该有效:

collection.whereEqualTo("meta", hashMapOf( // <-- using parcial hash-map for matching
    "user" to "JD",
    "name" to "John"
))

如果您无法让它工作,请编辑您的问题以包含您认为这应该匹配的文档的屏幕截图,我会再看看。

无法为字段指定部分映射匹配,因此如果这是您的需要,您确实需要为每个嵌套字段添加单独的条件。