首页 > 解决方案 > Firestore 搜索数组包含多个值的任意值

问题描述

如果我有这样的收藏:

Logos:
  Logo1:
   colors: ["red","black"]
   shapes: ["square","circle"]
  Logo2:
   colors: ["red","yellow"]
   shapes: ["square"]

如果我想搜索红色或黑色的徽标,我会执行以下操作:

db.collection("Logos").where("colors", "array-contains-any", ["red", "black"]).get().then((querySnapshot) => {
        //do stuff
    })

这将使我得到我收藏中包含红色或黑色的所有徽标。但是,我如何能够搜索(red OR black) AND (circle OR square)但我无法组合多个array-contains-any运算符的徽标。

这在 Cloud Firestore 中是否可行?如果没有,还有其他方法可以做到这一点吗?

标签: javascriptgoogle-cloud-firestore

解决方案


从 Firestore 文档中:

每个查询最多可以使用一个in, not-in, orarray-contains-any子句。您不能在同一查询中组合in, not-in array-contains-any`。, and

解决方法是将您要检查的值组合到一个数组中,但我认为这不会在这里起作用,因为您随后会在该数组上寻找组合ANDOR条件。

因此,唯一的选择似乎是直接在数据库上执行一个条件,然后在您的应用程序代码中进行其余的过滤。


推荐阅读