在Firestore查询中,如何检查元素是否是地图中的键?
例如,我有此文档:
我想检查用户的UID是否与“作者”地图数据结构中的UID之一匹配。到目前为止,我所看到的所有答案都在“哪里”,但我认为Firestore查询不再允许使用这种语法吗?
答案 0 :(得分:0)
您无法查询类似的键(至少我不知道)。
我建议您添加一个字段authorUids
,该字段是作者的UID的数组。使用该数组,然后可以使用array-contains
运算符:
collectionRef.where('authorUids', 'array'contains', 'ppGr1M8s...');
答案 1 :(得分:0)
无法想象您如何获得“ where”不再有效的印象(而是),但特别是,“ where”是对字段的 value 的检验(不是它的存在),并且没有测试“空”或“不等于”。
但是-在这里推测一个小错误-您可能 可以伪造您的情况下的非空测试:
collectionRef.where('authors.'+ userUID + '.0', ">", U+0000)
(根据需要修正符号)的含义
在示例中将fieldPath设置为串联字符串author.ppGr1M8sQWVrrsna6MlcQqxzLA3.0
,并将字段Value设置为Unicode字符值0(即字符串可能的最小词汇值)
因此字符串的ANY值都大于null,如果它根本存在。
firestore文档指出不会返回不包含指定字段路径的文档,但是您仍然需要对该值进行有效测试。我强烈怀疑这会导致创建许多效率低下的索引,因此不建议这样做。
一个有趣的练习,如果这种方法确实起作用(我还没有尝试过并且不打算这样做)-但实际上,找到了另一个结构-令人费解的黑客行为说明确实是一个糟糕的主意。
最重要的决策,特别是对于NoSQL数据库而言,是您的结构/架构决策-不必花费太多精力强迫自己解决不良的架构/结构。