where EqualTo支持HashMap相等吗



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

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

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

其中CCD_ 6是具有两个键/值对的CCD_。

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

{
"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"
))

如果你不能做到这一点,请编辑你的问题,包括一张你认为应该匹配的文档的截图,我会再看一眼。

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

最新更新