2016-08-31 170 views
0

鑑於以下文檔。Firebase實時數據庫:如何檢查子值是否存在

website:{ 
    uid1:{ 
     foo:"bar", 
     username:"joff" 
    }, 
    uid2:{ 
     foo:"bar2", 
     username:"karla" 
    }   
} 

我正在嘗試使用下面的查詢來檢查username是否已經存在。

var ref = db.ref('website'); 
var queryString = 'joff'; 

ref.orderByChild('username').equalTo(queryString).once('value', function(snap){ 
    if(snap.exists()){ 
     // exists 
     return 
    } 
    console.log('available'); 
}) 

這種方法工作沒有問題,如果我改變queryString因此我得到的,我想如果它存在與否的結果。

Firebase的默認查詢限制爲100,我可以根據文檔將其更改爲我的喜好。

但是,如果我會查詢,但如果讓我們說10,000文件呢?我不能在這裏使用分頁查詢,因爲如果查詢匹配是在第二頁上?我如何處理這些數據量?它會在響應之前花費太長時間嗎?做這種查詢的正確方法是什麼?

PS

我嚴格需要的數據模型是相同的如上面給出的。

在此先感謝。

回答

1

我認爲使用equalTo生成了一個「智能」查詢,所以查詢限制不會成爲決定記錄是否存在的因素。雖然我不積極。你是否真的證實有超過100條記錄,你的'joff`在排序中超過100,結果不匹配?

如果是這樣的話(這將是非常令人吃驚的),那麼你很可能調整你的查詢是這樣的:

ref.orderByChild('username').startAt(queryString).endAt(queryString).once('value', function(snap){ 
    if(snap.exists()){ 
     // exists 
     return 
    } 
    console.log('available'); 
}) 

...但同樣,我不認爲在需要時使用equalTo

+0

嘿!其實你是對的。我用'limitToFirst(100)'測試了它,'joff'測試了100+,實際上,如果使用'equalTo()',似乎'limitToFirst()'函數就不再重要了。抱歉沒有正確測試數據。感謝kailatech。 :) – CENT1PEDE

相關問題