ドキュメントには、null
値のデータ型(data types documentationを参照)のプロパティを含めることができます。これにより、website
プロパティがnull
の場合に結果を制限するクエリを作成できます。
これは不足しているプロパティと全く同じではありませんが、custom objectsを使用してFirestoreにデータを書き込むと、空のプロパティは自動的にnull
として保存されます。 null
の値をデータベースに手動またはプログラムで書き込むこともできます。アンドロイドで
、私は次のように使用して、これをテストした:
ように私のデータベース構造が見えた
FirebaseFirestore.getInstance().collection("test").whereEqualTo("website", null).get();
:ドキュメント9Hf7uwORiiToOKz6zcsX
が文字列が含まれているので、これは、文書のみinuwlZOvZNTHuBakS6GV
を返さ
![example firestore structure](https://i.stack.imgur.com/yHems.jpg)
値はwebsite
プロパティです。
あなたは通常、不幸にもカスタムオブジェクトがサポートされていないSwiftで開発すると思いますが、NSNull()
を使用してFirestoreにnull
という値を書き込むことができます。例(私はスウィフトに堪能でないんだけど、そうすべての問題を修正して自由に感じる)の場合:
// 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())
文書は存在しない値を照会する方法を言及していないので、これはのように思えます次善のアプローチ。誰かが代替案を改善したり提案したりすることができれば、してください。
この精巧な答えをありがとうございました。 – Georg
これは喜びでした。特にこれがSwiftへの初めての露出だったので、私も何かを学びました!受け入れてくれてありがとう。 – Grimthorr
これをちょっと検討した後、おそらく索引付けが機能するにはこの方法が必要です。プロパティーがまったく設定されていない場合は、おそらく索引付けされていないため、照会できません。プロパティをnullに設定すると、プロパティの各インデックスにドキュメントが追加されます。 コードに1つのコメント:私は後でそれを試してみますが、理論的には、NSNull()の代わりにSwift "nil"を使用することもできます。 もう一度ありがとうございます。 – Georg