whereEqualTo 是否支持 HashMap 相等性?
Does whereEqualTo support HashMap equality?
whereEqualTo
API可以将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"
))
如果您无法让它工作,请编辑您的问题以包含您认为这应该匹配的文档的屏幕截图,我会再看看。
无法为字段指定部分映射匹配,因此如果这是您的需要,您确实需要为每个嵌套字段添加单独的条件。
whereEqualTo
API可以将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"
))
如果您无法让它工作,请编辑您的问题以包含您认为这应该匹配的文档的屏幕截图,我会再看看。
无法为字段指定部分映射匹配,因此如果这是您的需要,您确实需要为每个嵌套字段添加单独的条件。