在Cloud Firestore中,我需要使用array-contains
查询在包含地图的数组中查找匹配项。
我可以很容易地匹配直接字符串,数字等,但是当数组的值是映射时,它总是失败。文档没有暗示这是否可能。
这是一些数据的例子
{
data:
[
item_1: {...},
item_2: {...}
]
}
这是查询的一个例子
db.collection("list")
.where("data", "array-contains", "item_1")
.get()
.then(collectionRef => {
//do something with collection
})
我期望数组包含的内容与地图的最高值(item_x)匹配,但目前与此不匹配。我认为这是因为它想将地图的整个内容匹配为数组项的“值”。
任何帮助将不胜感激。如果这不可能,我可能不得不重新考虑我的数据结构。对于上下文,我在云函数中使用它来在原始文档更新时更新数组中的项目(它们是对文档的引用)。
答案 0 :(得分:2)
包含数组的查询仅匹配数组中的整个项目。如果该项目是一个对象,则查询必须提供整个精确的对象以匹配数组中的相等性。
不支持您当前正在执行的操作。您将不得不在文档中提供其他字段以进行搜索,可能会重复该文档中的数据,这对于NoSQL类型数据库是常见的。