如何在 Cloud Firestore 中查询不存在的文档键 [英] How to query Cloud Firestore for non-existing keys of documents

查看:21
本文介绍了如何在 Cloud Firestore 中查询不存在的文档键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个带有一些可选属性的数据模型.例如,这可以是具有名字"、姓氏"和可选的网站"属性的用户对象.

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

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

谢谢.

解决方案

文档可以包含具有 null 值数据类型的属性(请参阅

这仅返回文档 inuwlZOvZNTHuBakS6GV,因为文档 9Hf7uwORiiToOKz6zcsXwebsite 属性中包含一个字符串值.

我相信您通常在 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆