如何在Firestore中获取对象包含密钥的文档?

时间:2018-11-05 11:54:31

标签: ionic3 google-cloud-firestore angularfire2

我正在使用Firestore和Angularfire2创建一个Ionic应用程序。

我的数据库结构如下:

Database.getInstance().doQueryStuff(); // doQueryStuff is just an example of a method call.

创建者可以创建帖子/文章。当创建者创建文章时,他可以指定帖子所属的类别!

不过,与应用有关的事情是,当用户想要按类别进行过滤时,它将把所有至少包含一个帖子的CREATORS包含在用户选择的类别中(而不是将所有文章都包含在该类别中)。

因此,基于上述结构,我尝试了以下操作:

- creators
  - CREATOR_ID
    - name (string)
    - description (string)
    - posts (map)
      - category1 (array)
        - [POST1, POST2, POST3]
      - category2 (array)
        - [POST3, POST4, ...]

但是它什么也不返回!

你们有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

正如我在您的数据库架构中看到的那样,您的category1category2是数组。以下where()函数调用:

.where("posts.category1", '>', "POST1")

如果您的类别(category1category2)的类型为Map而不是数组,并且已经被查询特定帖子,那么将可以使用。为了解决这个问题,有两种方法:

第一种方法是将类别的类型从array-> map更改为使用上面的代码,第二种方法是使用:

.where("posts.category1", , "array-contains", "POST1")

但是请注意,以上方法都无法帮助您确定数组是否包含至少一个元素。为此,您应该添加一个侦听器,并检查该特定数组/映射是否存在。

请参阅here更多信息。