2017-10-31 9 views
7

私はグーグルでCloud Firestoreのドキュメントをチェックし、サブコレクションインデックスを宣言する方法については何も見つけませんでした。私はこのCloud Firestoreでサブコレクションインデックスを作成する方法は?

...{  
    "collectionId": "user/{uid}/feeds", 
    "fields": [..] 
}... 

のようなものを宣言していると私はそれを正しくか作成した場合、インデックスタブでは、この

__escuser~1{uid}~1feeds__ 

ないアイデアのように保存されています。

+0

申し訳ありませんが、あなたは "サブコレクションインデックス"の意味を明確にできますか?あなたは何をしようとしているのですか? –

+0

ユーザーコレクションがあり、各 'user'コレクションには別の' feeds'コレクションがあり、サブコレクションのインデックスを追加できません〜https://firebase.google.com/docs/firestore/query-data/indexing – Shaxrillo

+0

@ Shaxrillo私はどこかでこの機能が計画されていたがまだ実装されていないことを見てきました。ベータ版では実装されません。私もこの機能が欲しい – Thaina

答えて

7

インデックスを作成すると、手動でインデックスを作成するクエリを実行するよう実際に指示され、次にブラウザに貼り付けることができるURLが生成されます。

enter image description here

これは、あなたがそれを行う方法です。

  1. npm init
  2. npm i --save firebase-admin
  3. 新しいディレクトリを作成し、文書に次の関数を入れindex.js
  4. を作成します。

    const admin = require('firebase-admin'); 
    const serviceAccount = require('./firebase-creds.json'); 
    
    admin.initializeApp({ 
        credential: admin.credential.cert(serviceAccount), 
        databaseURL: 'https://projectId.firebaseio.com' 
    }); 
    
    function runQuery() { 
        db 
        .collection('users') 
        .doc(someRandomUserId) 
        .collection('feed') 
        .where('read', '==', false) 
        .where('timestamp', '<=', 1509889854742) //Or something else 
        .get() 
        .then(doc => { 
        console.log(doc.data()); 
        }) 
        .catch(error => console.log(error)); 
    }; 
    runQuery(); 
    
  5. node index.js

実行して、これは、このようないろいろ書いを吐き出すます:

{ Error: The query requires an index. You can create it here: https://console.firebase.google.com/project/project-projectID/database/firestore/indexes?create_index=longRandomString ...}

は、リンクをコピーしてブラウザに貼り付けます。

enter image description here

更新

(CLI経由)、手動でインデックスを追加するには、次の操作を実行できます。

{ 
    "indexes": [ 
    { 
     "collectionId": "feed", 
     "fields": [ 
     { "fieldPath": "read", "mode": "ASCENDING" }, 
     { "fieldPath": "timestamp", "mode": "ASCENDING" }, 
     ... 
     ] 
    } 
    ] 
} 

それとも単にデータベース内の管理パネルに行きますフィードのインデックスを追加します。

+0

ありがとう@クリスしかし、私は手動で自動生成されたURLでではなくそれを追加したい – Shaxrillo

+0

[OK]をそれに関係なく、同じ結果になるだろうが、上記を参照してください。あなたは 'サブコレクションパス'を指定せず、コレクションID @Shaxrillo – Chris

+1

@Chrisだけを指定しますが、「コレクションID」は何ですか?ファイヤーストア階層の異なる部分に同じ名前のコレクションが複数あります。例えば/ cars/{carIds}/models and/magazines/{magazineId}/models 「モデル」にインデックスを置くだけで、firebaseは両方のコレクションにインデックスを適用しますか?お互いに独立して索引付けできるようにするには、コレクションに固有の名前をすべて付ける必要がありますか? – zevdg

関連する問題