我想确保Cloud Firestore文档中的数组字段不包含任何重复的条目,但是,我找不到任何methods in the documentation可以让我轻松检查这一点。
我想出了一个可能的解决方案,可确保列表仅包含a
和b
,并且没有重复的条目。
function containsNoDuplicates(array) {
return array is list
&& array.size() <= 2
&& array.hasOnly(['a', 'b'])
&& (
array.size() <= 1
|| (array.size() == 2 && array.hasAll(['a', 'b']))
)
;
}
这等效于以下功能:
function containsNoDuplicates(array) {
return array == []
|| array == ['a']
|| array == ['b']
|| array == ['a', 'b']
|| array == ['b', 'a']
;
}
您可能会说,这可伸缩。如果我只允许说一组特定元素(例如十几个元素),我将如何处理?
答案 0 :(得分:2)
安全规则中实际上有一个未记录的语言功能,该功能可让您将列表转换为新的“集合”类型的对象,该对象保证没有重复。列表中的所有重复项将在集合中折叠。这意味着您要做的就是将原始列表的大小与集合的大小进行比较,以找出是否存在重复:
function containsNoDuplicates(array) {
return array.toSet().size() == array.size();
}