2017-06-01 2 views
0

私はfirebaseに地域辞書アプリを作ろうとしています。OrderByChild、equalTo、limitToFirstクエリデータベース全体をロードしています

データ構造の画像:改ページが正常に動作のためのData structure

OrderByKeyとlimitToFirstクエリは、それだけで照会データをロードしています。以下のコードサンプル -

db.ref('dictionary') 
    .orderByKey() 
    .startAt(String(this.perpage * (this.page - 1) + 1)) 
    .limitToFirst(this.perpage) 
    .once('value') 
    .then((snapshot) => { 
    vm.words = [] 
    snapshot.forEach(function (childSnapshot) { 
     var childKey = childSnapshot.key 
     var childData = childSnapshot.val() 
     childData.id = childKey 
     vm.words.push(childData) 
    }) 
    vm.inProgress = false 
    }) 

しかし、私はorderByChild('word').equalTo(search_query).limitToFirst(3)を使用してクエリを実行していたとき、それは(のWebSocketから検査)一度にすべての176023件のレコードをフェッチしています。以下のサンプルコード -

db.ref('dictionary') 
    .orderByKey() 
    .orderByChild('word') 
    .equalTo(this.search + '') 
    // .startAt(String(25 * (this.page - 1) + 1)) 
    .limitToFirst(3) 
    .on('value', (snapshot) => { 
    console.log(snapshot) 
    snapshot.forEach(function (childSnapshot) { 
     var childKey = childSnapshot.key 
     var childData = childSnapshot.val() 
     childData.id = childKey 
     vm.words.push(childData) 
    }) 
    vm.inProgress = false 
    }, (error) => { 
    console.log(error) 
    vm.inProgress = false 
    }) 

答えて

0

ほとんどの場合、インデックスはwordにありません。索引がない場合、サーバーはクライアント全体に場所を送信し、クライアントは次にフィルターを適用します。その場合は、JavaScriptコンソールでも明示的な警告が表示されます。

section in the Firebase documentation on how to define indexesを参照してください。

+0

ありがとう!それは働いている。 –