Firestore获取值不在数组中的文档吗?

时间:2018-08-29 20:48:28

标签: firebase google-cloud-firestore

有没有一种方法可以获取所有数组字段不包含一个或多个值的文档,现在有“ array-contains”,但是是否有“ array-not-contains”之类的东西?

4 个答案:

答案 0 :(得分:2)

我认为目前尚不可能。我会尝试查看此博客文章以供参考。

better arrays in cloud firestore

您可能需要将数组转换为对象,以便可以通过(property === false)Convert array to object

进行查询

答案 1 :(得分:2)

您只能基于索引查询Firestore,这样所有查询都可以扩展到搜索数十亿文档而没有性能问题。

索引通过记录数据集中存在的值来工作。如果索引跟踪不存在的内容,则它可能不会高效。这是因为与您的数据集相比,不存在的值的范围非常大,因此无法对其进行索引。查询某些值的不存在将需要扫描您的所有文档,并且无法缩放。

答案 2 :(得分:0)

考虑到您的馆藏文档数量很少,您可以使用onCreate云功能触发器将其所有ID存储在另一个文档中,从客户端下载此文档并进行客户端过滤。如果您担心性能,也可以在云功能内完成所有这些操作。

您将额外读取1条信息,但这没什么大不了的,每个文档最多可以有1 MB的存储空间,这很多,因此您不必担心太多,也可以将这些ID分成不同的内容文档,如果文档太大,则将其合并到客户端/云功能上。

这对于少量数据非常有效,但是如果您期望数百万个文档,那么您将无能为力。

答案 3 :(得分:0)

Firestore最近添加了对a not-in clause的支持。

citiesRef.where('country', 'not-in', ['USA', 'Japan']);

这将获取country存在且具有除“ USA”,“ Japan”或“ null”以外的其他值的所有文档。