Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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,假设我有一个带有一些可选属性的数据模型。例如,可以是具有“firstname”、“lastname”和可选“website”属性的用户对象 在Cloud Firestore中,只有具有已知网站的用户文档才会设置“网站”属性,对于所有其他用户文档,此属性将不存在 我现在的问题是如何在没有“网站”属性的情况下查询所有用户文档 谢谢。文档可以包含null值数据类型的属性(请参阅)。这将允许您构造一个查询,以限制网站属性为null的结果 这与缺少的属性不同,但如果您使用将数据写入Firestore,空属

假设我有一个带有一些可选属性的数据模型。例如,可以是具有“firstname”、“lastname”和可选“website”属性的用户对象

在Cloud Firestore中,只有具有已知网站的用户文档才会设置“网站”属性,对于所有其他用户文档,此属性将不存在

我现在的问题是如何在没有“网站”属性的情况下查询所有用户文档


谢谢。

文档可以包含
null
值数据类型的属性(请参阅)。这将允许您构造一个查询,以限制
网站
属性为
null
的结果

这与缺少的属性不同,但如果您使用将数据写入Firestore,空属性将自动保存为
null
,而不是完全不保存。您还可以手动/编程方式将
null
值写入数据库

在安卓系统中,我使用以下方法对此进行了测试:

FirebaseFirestore.getInstance().collection(“test”).whereEqualTo(“网站”,null.get();
我的数据库结构如下所示:

这只返回文档
inuwlZOvZNTHuBakS6GV
,因为文档
9hf7uhoritookz6zcsx
网站
属性中包含字符串值

我相信您通常使用Swift开发,不幸的是,在Swift中不支持自定义对象,但是您可以使用
NSNull()
null
值写入Firestore。例如(我不精通Swift,因此请随时更正任何问题):

//写入数据
let docData:[字符串:任意]=[
“firstname”:“示例”,
“lastname”:“用户”,
“网站”:NSNull()
]
db.collection(“数据”).document(“一”).setData(docData){err in
如果让err=err{
打印(“写入文档时出错:\(错误)”)
}否则{
打印(“文档成功写入!”)
}
}
//查询空值
让query=db.collection(“test”).whereField(“网站”,isEqualTo:NSNull())

文档中没有提到查询不存在的值的方法,因此这似乎是下一个最好的方法。如果有人可以改进或建议替代方案,请这样做。

非常感谢您的详细回答。这是我的荣幸,特别是因为这是我第一次接触Swift,所以我也学到了一些东西!感谢您的接受。在仔细考虑了这一点之后,可能需要采用这种方式来建立索引。如果一个属性根本没有设置,它可能没有索引,因此无法查询。将属性设置为null将把文档添加到属性的相应索引中。对代码的一点注释:我稍后会亲自尝试,但理论上,您的示例也应该使用Swift“nil”而不是NSNull()来工作。再次感谢。是否可以构建相同的查询,只选择基于不等于null的文件的文档?例如,是否仅为“网站”字段选择包含非空值的文档?Firestore不提供
isNotEqual
运算符,这是否意味着我们必须获取所有文档,并手动执行筛选?更新:找到检查非空值的解决方案。