假设我有一个带有一些可选属性的数据模型 . 这可以是例如具有“firstname”,“lastname”和可选的“website”属性的用户对象 .
在Cloud Firestore中,只有具有已知网站的用户文档才会设置“网站”属性,对于所有其他用户文档,此属性将不存在 .
我现在的问题是如何查询所有用户文档 without a "website"属性 .
谢谢 .
文档可以包含具有 null 值数据类型的属性(请参阅data types documentation) . 这将允许您构造查询以限制 website 属性为 null 的结果 .
null
website
这与缺少的属性不完全相同,但如果使用custom objects将数据写入Firestore,则空属性将自动保存为 null 而不是根本不保存 . 您还可以手动/以编程方式将 null 值写入数据库 .
在Android中,我使用以下方法对其进行了测试:
FirebaseFirestore.getInstance().collection("test").whereEqualTo("website", null).get();
我的数据库结构如下所示:
这仅返回文档 inuwlZOvZNTHuBakS6GV ,因为文档 9Hf7uwORiiToOKz6zcsX 包含 website 属性中的字符串值 .
inuwlZOvZNTHuBakS6GV
9Hf7uwORiiToOKz6zcsX
我相信你通常在Swift中开发,不幸的是不支持自定义对象,但你可以使用 NSNull() 将一个 null 值写入Firestore . 例如(我不熟练使用Swift,所以请随时纠正任何问题):
NSNull()
// Writing data let docData: [String: Any] = [ "firstname": "Example", "lastname": "User", "website": NSNull() ] db.collection("data").document("one").setData(docData) { err in if let err = err { print("Error writing document: \(err)") } else { print("Document successfully written!") } } // Querying for null values let query = db.collection("test").whereField("website", isEqualTo: NSNull())
文档没有提到查询不存在的值的方法,因此这似乎是下一个最好的方法 . 如果有人可以改进或建议替代品,请做 .
1 回答
文档可以包含具有
null
值数据类型的属性(请参阅data types documentation) . 这将允许您构造查询以限制website
属性为null
的结果 .这与缺少的属性不完全相同,但如果使用custom objects将数据写入Firestore,则空属性将自动保存为
null
而不是根本不保存 . 您还可以手动/以编程方式将null
值写入数据库 .在Android中,我使用以下方法对其进行了测试:
我的数据库结构如下所示:
这仅返回文档
inuwlZOvZNTHuBakS6GV
,因为文档9Hf7uwORiiToOKz6zcsX
包含website
属性中的字符串值 .我相信你通常在Swift中开发,不幸的是不支持自定义对象,但你可以使用
NSNull()
将一个null
值写入Firestore . 例如(我不熟练使用Swift,所以请随时纠正任何问题):文档没有提到查询不存在的值的方法,因此这似乎是下一个最好的方法 . 如果有人可以改进或建议替代品,请做 .