Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Firestore获取值不在数组中的文档?_Firebase_Google Cloud Firestore - Fatal编程技术网

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

Firebase Firestore获取值不在数组中的文档?,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,是否有办法获取数组字段不包含一个或多个值的所有文档,现在有“array contains”,但是否有类似“array not contains”的内容?我认为目前不可能这样做。我会试着看看这篇博文以供参考 您可能需要将数组转换为对象,这样您就可以通过(property==false)进行查询。您只能基于索引查询Firestore,这样所有查询都可以扩展到搜索数十亿个文档,而不会出现性能问题 索引通过记录数据集中存在的值来工作。如果索引跟踪不存在的内容,那么它就不可能是有效的。这是因为与您的数据

是否有办法获取数组字段不包含一个或多个值的所有文档,现在有“array contains”,但是否有类似“array not contains”的内容?

我认为目前不可能这样做。我会试着看看这篇博文以供参考


您可能需要将数组转换为对象,这样您就可以通过(property==false)进行查询。

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


索引通过记录数据集中存在的值来工作。如果索引跟踪不存在的内容,那么它就不可能是有效的。这是因为与您的数据集相比,不存在的值的范围非常大,因此无法编制索引。查询某个值是否不存在需要扫描您的所有文档,这是不可伸缩的。

考虑到您的集合的文档数量较少,您可以使用onCreate cloud函数触发器将它们的所有ID存储在另一个文档中,从客户端下载此文档并在客户端进行筛选。如果您担心性能,也可以在云函数中完成所有这些

您将有1个额外的读取,但这没什么大不了的,每个文档最多可以有1 MB的存储空间,这是一个很大的数字,因此您不必太担心,您还可以将这些ID划分为不同的文档,如果它们太大,可以在客户端/云功能上合并它们


这对于小数据集非常有效,但是如果您希望有数百万个文档,那么您就无能为力了。

Firestore最近增加了对的支持

citiesRef.where('country','notin',['USA','Japan')


这将获取存在
国家/地区且具有除“USA”、“Japan”或“null”以外的值的每个文档。

尝试数组包含“。@JeffPadget,它将返回数组字段包含空字符串值的所有文档。这在这里行不通。我的错误,误读了问题。如果属性不存在,即使使用
property===false
进行查询也不会给出结果,除非数组中的元素是动态的,具有任意值,然后,如果您对多个字段进行查询,这将由于索引问题而失败。我理解您的语句,但这也意味着有些事情是不可能的。例如,如何向用户显示尚未看到的用户列表?像Tinder一样,你向人们展示你还没有“匹配”的人,你存储你匹配或忽略的人,但你不能记录(并制作索引)所有你还没有匹配的人。即使用户相对较少(超过1万),您也将拥有超过10亿的记录。我不知道我所说的是否有意义,但我没有找到在Firebase中表示这种关系的方法。如果您想记录尚未执行的操作,只需在创建文档时指定一个已知值来指示它,以便对其进行索引。e、 g.
hasdonemething=false
然后,在执行操作时,将其设置为true。你必须提前知道你想索引什么。亲爱的,你能详细说明一下你在这里提出的主张吗<代码>hasdonemething=false
方法