当前位置: 首页 > 知识库问答 >
问题:

Firestore搜索数组包含多个值

尹超
2023-03-14
Fruits:
  Banana:
   title: "Banana"
   vitamins: ["potassium","B6","C"]
  Apple:
   title: "Apple"
   vitamins: ["A","B6","C"]
db.collection("Fruits").whereField("vitamins", arrayContains: "A").getDocuments() { (querySnapshot, err)  in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            for document in querySnapshot!.documents {
                print("\(document.documentID) => \(document.data())")
            }
        }
    }

在Cloud Firestore中这甚至是可能的吗?如果没有的话,有没有其他方法可以做到这一点?

共有1个答案

孟凯泽
2023-03-14

通过在查询中链接条件来查找与多个条件匹配的文档是很有诱惑力的:

db.collection("Fruits")
    .whereField("vitamins", arrayContains: "B6")
    .whereField("vitamins", arrayContains: "C")

但是关于复合查询的文档建议您当前不能在一个查询中有多个arrayContains条件。

所以,以你今天所拥有的是不可能的。请考虑使用映射结构而不是数组:

Fruits:
  Banana:
   title: "Banana"
   vitamins: {
     "potassium": true,
     "B6": true,
     "C": true
   }
db.collection("Fruits")
    .whereField("vitamins.B6", isEqualTo: true)
    .whereField("vitamins.C", isEqualTo: true)
 类似资料:
  • 问题内容: 如果我有一个简单的集合,例如: 如果我要搜索含有维生素B6的水果,则可以执行以下操作: 这样一来,我便可以看到我收藏的所有含有维生素A的水果。但是,我如何能够搜索含有多种维生素(例如维生素B6和C)的水果?我不能简单地搜索,因为那样会寻找数组,而不是独立的字符串。 在Cloud Firestore中甚至有可能吗?如果没有,还有其他替代方法吗? 问题答案: 通过在查询中链接条件来寻找匹配

  • 一旦我将类别从数组更改为映射,我想我可以使用多个where条件来过滤文档 现在问题2,firebase要求为复合查询添加索引。我在每个文档中保存的类别是动态的,我无法提前添加这些索引。在这种情况下,理想的解决方案是什么?如有任何帮助,不胜感激。

  • 问题内容: 如何在上面的数组中松散搜索“ Last”一词? 上面的代码仅在指针与值中的所有内容完全匹配时才回显值的键,这是我不想要的。我想要这样的东西: 如果值包含单词“ Last”,我希望值的键回显。 问题答案: 要查找符合搜索条件的值,可以使用函数: 现在,数组将仅包含原始数组中包含单词 last (不区分大小写)的元素。 如果需要查找与条件匹配的值的键,则需要遍历数组: 现在,数组包含原始数

  • 问题内容: 我有具有重复值的numpy 2d数组。 我正在搜索这样的数组。 输入是列表,其编号类似于列0的值。我想要的最终结果是任何形式的结果行,例如数组,列表或元组 我的代码工作正常,但似乎不是pythonic。有没有更好的多值搜索策略? 就像只进行一次查找即可获取所有值的地方。 我的真实数组很大 问题答案: 方法1: 使用- 方法2: 使用-

  • 如果我想搜索那些名字中包含巴黎的地方,我会做以下操作: 这样我就能看到所有有巴黎这个名字的地方。 然而,我如何能够搜索到其他标准的地方,如 null 在Cloud Firestore中这甚至是可能的吗?如果没有的话,有没有其他方法可以做到这一点?

  • 我希望在每个数组中获取多个对象,但我的代码显示了单个对象的操作。下面是我的PHP代码,我如何添加另一个循环来获取多个对象 这是显示单个物体的结果