Firestore在对象数组字段中查找具有特定对象的文档

时间:2019-02-25 15:08:51

标签: typescript firebase google-cloud-firestore

我正在尝试查询我的Firestore数据库,以查找集合中所有在数组字段中包含特定对象的文档。可以这么说,我的数据库有这样的文章集合:

articles:
  [
    {
      id: "1",
      title: "First Article",
      comments:[]
      relatedArticles:[
        {
          id: "2",
          title:"Second Article"
        },
        {
          id: "3",
          title:"Third Article"
        },
      ]
    },
    {
      id: "2",
      title: "Second Article",
      comments:[]
      relatedArticles:[
        {
          id: "1",
          title:"First Article"
        }
      ]
    }
    {
      id: "3",
      title: "Third Article",
      comments:[]
      relatedArticles:[
        {
          id: "1",
          title:"First Article"
        }
      ]
    }
  ]

articles集合中的每个文章都有一个数组字段(relatedArticles),该字段包含一组对象,每个对象都包含相关文章的id和标题。假设我想在数据库中查询在相关文章字段中包含文章1的所有文章。如果无法修改此结构,我将如何处理。我已经尝试了以下方法,但无济于事:

firestore().collection("articles")
  .where("relatedArticles", "array-contains", {title: "First Article", id: "1"})

这可行吗?如果不是,那是什么?

1 个答案:

答案 0 :(得分:0)

进行包含数组的搜索时,您只能匹配数组中对象的整个元素。您无法像现在尝试的那样在数组中选择对象的更深字段。

如果要满足此查询,您将在文档中需要其他可搜索的字段。也许一组 only 相关文档ID会为您服务。为了满足查询,通常在NoSQL数据库中复制数据。