如何在 Cloud Firestore 中查询不存在的文档键 [英] How to query Cloud Firestore for non-existing keys of documents
问题描述
假设我有一个带有一些可选属性的数据模型.例如,这可以是具有名字"、姓氏"和可选的网站"属性的用户对象.
在 Cloud Firestore 中,只有具有已知网站的用户文档才会设置网站"属性,对于所有其他用户文档,此属性将不存在.
我现在的问题是如何在没有网站"属性的情况下查询所有用户文档.
谢谢.
文档可以包含具有 null
值数据类型的属性(请参阅
这仅返回文档 inuwlZOvZNTHuBakS6GV
,因为文档 9Hf7uwORiiToOKz6zcsX
在 website
属性中包含一个字符串值.
我相信您通常在 Swift 中开发,不幸的是不支持自定义对象,但您可以使用 NSNull()
将 null
值写入 Firestore.例如(我不精通 Swift,所以请随时纠正任何问题):
//写入数据让 docData: [字符串: 任何] = ["firstname": "例子","lastname": "用户",网站":NSNull()]db.collection("data").document("one").setData(docData) { 输入错误如果让错误 = 错误 {print("写入文档时出错:(err)")} 别的 {print("文档写入成功!")}}//查询空值让查询 = db.collection("test").whereField("website", isEqualTo: NSNull())
文档没有提到查询不存在的值的方法,所以这似乎是下一个最佳方法.如果有人可以改进或提出替代方案,请这样做.
Let's say I have a data model with some optional properties. This could be for example a user object with a "firstname", a "lastname" and an optional "website" property.
In Cloud Firestore only user documents with a known website would have the "website" property set, for all other user documents this property would not exist.
My questions is now how to query for all user documents without a "website" property.
Thanks.
Documents can contain properties with a null
value data type (see data types documentation). This will then allow you to construct a query to limit results where the website
property is null
.
This is not quite the same as a missing property, but if you use custom objects to write data to Firestore, empty properties will automatically be saved as null
rather than not at all. You can also manually/programmatically write a null
value to the database.
In Android, I tested this using the following:
FirebaseFirestore.getInstance().collection("test").whereEqualTo("website", null).get();
Where my database structure looked like:
This returned only the document inuwlZOvZNTHuBakS6GV
, because document 9Hf7uwORiiToOKz6zcsX
contains a string value in the website
property.
I believe you usually develop in Swift, where unfortunately custom objects aren't supported, but you can use NSNull()
to write a null
value to Firestore. For example (I'm not proficient in Swift, so feel free to correct any issues):
// 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())
The documentation doesn't mention a method to query for values that don't exist, so this seems like the next best approach. If anyone can improve or suggest alternatives, please do.
这篇关于如何在 Cloud Firestore 中查询不存在的文档键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!