如何使用包含数组的数组包含映射

时间:2019-04-06 22:56:16

标签: javascript firebase google-cloud-firestore

在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)匹配,但目前与此不匹配。我认为这是因为它想将地图的整个内容匹配为数组项的“值”。

任何帮助将不胜感激。如果这不可能,我可能不得不重新考虑我的数据结构。对于上下文,我在云函数中使用它来在原始文档更新时更新数组中的项目(它们是对文档的引用)。

1 个答案:

答案 0 :(得分:2)

包含数组的查询仅匹配数组中的整个项目。如果该项目是一个对象,则查询必须提供整个精确的对象以匹配数组中的相等性。

不支持您当前正在执行的操作。您将不得不在文档中提供其他字段以进行搜索,可能会重复该文档中的数据,这对于NoSQL类型数据库是常见的。