2017-10-04 3 views

答えて

9

でも、それは難しいことです。あなたは、必要な文字列と同じかそれ以上で、後継キーよりも小さいドキュメントを検索する必要があります。例えば

、照会う'bar'で見つめフィールド'foo'を含む文書を検索する:

db.collection(c) 
    .where('foo', '>=', 'bar') 
    .where('foo', '<', 'bas'); 

これは実際に私たちがパスに一致する文書のコレクションをスキャンするためのクライアントの実装に使用する技術です。私たちのsuccessor key computationは、現在のユーザーIDで始まるすべてのキーを探しているscannerによって呼び出されます。

+0

サクセサキーの使用方法は? –

+0

後続キーは、結果に特定の文字列で始まる文字列のみが含まれるようにクエリをバインドします。 foo> = 'bar'だけを検索しなければ、その文字列もbarよりも辞書的に大きいので、 'zoo'も返されます。 –

6

Gil Gilbertと同じです。 拡張機能とサンプルコード。 使用String.fromCharCodeString.charCodeAt

var strSearch = "start with text here"; 
var strlength = strSearch.length; 
var strFrontCode = strSearch.slice(0, strlength-1); 
var strEndCode = strSearch.slice(strlength-1, strSearch.length); 

var startcode = strSearch; 
var endcode= strFrontCode + String.fromCharCode(strEndCode.charCodeAt(0) + 1); 

は次に以下のようなコードをフィルタリングします。

db.collection(c) 
.where('foo', '>=', startcode) 
.where('foo', '<', endcode); 

すべての言語およびすべてのUnicodeで動作します。

警告:firestoreのすべての検索条件はCASE SENSITIVEです。

+0

同じ文書内で2つ以上のフィールドを1つにすることは可能ですか? ( 'bar'、 '<'、endcode).where( 'bar'、 '<'、endcode).where( 'foo'、 ' '、endcode);' – Erik

+0

これは[さらに、単一のフィールドで範囲比較(<, <=, >、> =)しか実行できません](https://firebase.google.com/docs/firestore/query-data /クエリ) – Erik