对象键存在的Firestore查询文档

时间:2018-08-01 14:14:46

标签: google-cloud-firestore

我正在编写一个跟踪事件的应用程序。我正在使用Firestore拥有events的主要集合,该集合将每个事件都存储为文档。每个文档都有自己的详细信息(包括roles对象)以及事件中它们自己的步骤集合。

集合对象如下:

events > [collection]
    eventid1 > [doc]
        steps > [collection]
        location: "Even Center",
        notes: "Some notes here",
        timestamp: 1272153600,
        title: "A great event",
        roles:
            userID1: 0, //numbers to define role type
            userID2: 1,
            userID3: 1,

我要尝试的是查询roles.userID1存在的任何事件。我知道firestore没有子集合查询,所以这是我最近解决这个问题的方法。

只有3个“角色”(0 =所有者,1 =编辑器,2 =查看器)。我尝试编写三个查询,并使用.where("roles." + this.user.uid, "==", 0)组合查询。这可以工作(尽管事后我遇到了一些阵列问题),但是我不想看到每个查看此信息的用户都要打3个电话。

我在某处的随机注释中看到可以使用查询.where("roles." + this.user.uid, "<", "")的地方,但这对我不起作用。

有没有一种方法可以编写查询以查看对象中是否存在键?

1 个答案:

答案 0 :(得分:0)

如上所述,我之所以能够回答自己的问题,是因为我无意中为成功做好了准备。

很早以前,我决定给我的角色一个数字值,而不是一个字符串值。 0、1和2。现在,我已经意识到,仅使用.where就可以有效地使用< 3子句。

我的查询现在包括.where("roles." + this.user.uid, "<", 3)

这实际上是查看角色的子对象(整个字符串类似于.where("roles.ehHH-scSd-d222-njsl-LLewS, "<", 3)。(3不是角色,因此,如果您有3个以上的角色,请增加数字)。