2017-10-18 4 views
4

いくつかのオプションのプロパティを持つデータモデルがあるとします。これは、例えば、「ファーストネーム」、「ラストネーム」、およびオプションの「ウェブサイト」プロパティを有するユーザオブジェクトであり得る。クラウドFirestoreに文書の存在しないキーがないか問い合わせる方法

クラウドFirestoreでは、既知のWebサイトを持つユーザー文書のみが「Webサイト」プロパティーを設定し、他のすべてのユーザー文書ではこのプロパティーは存在しません。

私の質問は、すべてのユーザー文書を照会する方法です。は「ウェブサイト」プロパティなしです。

ありがとうございました。

答えて

7

ドキュメントには、null値のデータ型(data types documentationを参照)のプロパティを含めることができます。これにより、websiteプロパティがnullの場合に結果を制限するクエリを作成できます。

これは不足しているプロパティと全く同じではありませんが、custom objectsを使用してFirestoreにデータを書き込むと、空のプロパティは自動的にnullとして保存されます。 nullの値をデータベースに手動またはプログラムで書き込むこともできます。アンドロイドで

、私は次のように使用して、これをテストした:

ように私のデータベース構造が見えた
FirebaseFirestore.getInstance().collection("test").whereEqualTo("website", null).get(); 

:ドキュメント9Hf7uwORiiToOKz6zcsXが文字列が含まれているので、これは、文書のみinuwlZOvZNTHuBakS6GVを返さ

example firestore structure

値は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()) 

文書は存在しない値を照会する方法を言及していないので、これはのように思えます次善のアプローチ。誰かが代替案を改善したり提案したりすることができれば、してください。

+1

この精巧な答えをありがとうございました。 – Georg

+0

これは喜びでした。特にこれがSwiftへの初めての露出だったので、私も何かを学びました!受け入れてくれてありがとう。 – Grimthorr

+2

これをちょっと検討した後、おそらく索引付けが機能するにはこの方法が必要です。プロパティーがまったく設定されていない場合は、おそらく索引付けされていないため、照会できません。プロパティをnullに設定すると、プロパティの各インデックスにドキュメントが追加されます。 コードに1つのコメント:私は後でそれを試してみますが、理論的には、NSNull()の代わりにSwift "nil"を使用することもできます。 もう一度ありがとうございます。 – Georg

関連する問題