whereEqualTo
API可以将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"
))
如果你不能做到这一点,请编辑你的问题,包括一张你认为应该匹配的文档的截图,我会再看一眼。
没有办法为字段指定部分映射匹配,所以如果这是您需要的,您确实需要为每个嵌套字段添加单独的条件。