2016-08-22 6 views
0

last_visitフィールドでstartAt(1週間前)とendAt(now)を使用して、2つの日付間でデータを取得するクエリがあります。Firebaseクエリ:特定のフィールドがnullのデータを除外します

次に、結果をループして、プロフィール画像を持たないユーザーを破棄します。

問題は約20%のユーザーがプロフィール画像を持っているため、100人のプロフィール写真を取得するには500人以上のユーザーをクエリする必要があります(私はlimitToLast(500)を使用します)。

SQLのようなものを何らかの方法で指定することで、このクエリをより効率的にすることができますか?WHERE profile_picture IS NOT NULL?

可能であれば、プロフィール画像が設定されているユーザーのみを撮影することができる場合は、limitToLast(100)も使用できます。あなたはプロパティを持っていない項目を除外しようとしている場合は、可能な値の最も広い範囲を照会する必要が

users: { 
    {user_uid}: { 
    profile_picture: null, 
    last_visit: 123456789 
    } 
    {user_uid}: { 
    profile_picture: 'example.com/pic.png', 
    last_visit: 123456789 
    } 
} 
+3

'ref.orderByChild( 'profile_picture')。startAt( 'a')。endAt( 'z〜')'? –

+0

うん、それを使って:-)ありがとう –

答えて

1

データベースは次のようになります。

簡単な例は次のようになります。これは、ASCII文字からなるほとんどのキーをキャプチャします

ref.orderByChild('profile_picture').startAt('!').endAt('~')‌​ 

!は最初の印字可能な文字(#33)で、~は、最後の印字可能な文字(#126)であるため、 。あなたのキーがユニコード文字で構成されているときには動作しないので、注意してください。

関連する問題