我正在编写一个跟踪事件的应用程序。我正在使用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, "<", "")
的地方,但这对我不起作用。
有没有一种方法可以编写查询以查看对象中是否存在键?
答案 0 :(得分:0)
如上所述,我之所以能够回答自己的问题,是因为我无意中为成功做好了准备。
很早以前,我决定给我的角色一个数字值,而不是一个字符串值。 0、1和2。现在,我已经意识到,仅使用.where
就可以有效地使用< 3
子句。
我的查询现在包括.where("roles." + this.user.uid, "<", 3)
。
这实际上是查看角色的子对象(整个字符串类似于.where("roles.ehHH-scSd-d222-njsl-LLewS, "<", 3)
。(3不是角色,因此,如果您有3个以上的角色,请增加数字)。