2017-10-31 3 views
7

Ich habe gegoogelt und die Cloud Firestore-Dokumentation überprüft und nichts darüber gefunden, wie Indizes für Untersammlungen deklariert werden. Ich habe so etwas wie dieseSo erstellen Sie Subcollection-Indizes in Cloud Firestore?

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

und in der Registerkarte Indizes ist es wie diese

__escuser~1{uid}~1feeds__ 

Keine Ahnung gespeichert, wenn ich richtig oder nicht erstellt.

+0

Sorry, können Sie klarstellen, was Sie unter "Subcollection Indexes" verstehen? Was versuchst du zu machen? –

+0

Es gibt eine Benutzersammlung und jede 'user'-Sammlung hat eine andere' feeds'-Sammlung und ich kann keine Indizes für Untersammlungen hinzufügen ~ https://firebase.google.com/docs/firestore/query-data/indexing – Shaxrillo

+0

@Shaxrillo Ich habe irgendwo erwähnt, dass dieses Feature geplant, aber noch nicht implementiert wurde. Und es wäre nicht in der Beta implementiert. Ich möchte auch diese Funktion – Thaina

Antwort

7

Wenn Sie einen Index erstellen, werden Sie aufgefordert, die Abfrage, die Sie einen Index für einmal erstellen manuell ausführen möchten, und dann wird eine URL generiert, die Sie in den Browser einfügen kopieren können et voila!

enter image description here

Dies ist, wie Sie es tun:

  1. ein neues Verzeichnis index.js
  2. die folgende Funktion in das Dokument einfügen erstellen

  3. npm init
  4. npm i --save firebase-admin
  5. erstellen

    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(); 
    
  6. Run node index.js

Dies wird someting wie diese ausspucken:

{ 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 ...}

Kopieren Sie den Link und fügen Sie ihn in Ihrem Browser.

enter image description here

aktualisieren

den Index manuell hinzuzufügen (über die CLI) Sie Folgendes tun können:

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

Oder einfach in die Admin-Panel in der Datenbank gehen und fügen Sie dort den Index für Feeds hinzu.

+0

Vielen Dank @Chris Aber ich möchte es manuell nicht durch automatisch generierte URL hinzufügen – Shaxrillo

+0

Ok, es wird das gleiche Ergebnis unabhängig sein, aber siehe oben. Sie geben keinen 'Untersammlungspfad' an, sondern nur die Sammlungs-ID @Shaxrillo – Chris

+1

@Chris, aber was ist eine "Sammlungs-ID"? Ich habe mehrere Sammlungen mit demselben Namen in verschiedenen Teilen meiner Firestore-Hierarchie. z.B./ cars/{carIds}/models und/magazines/{magazinId}/models Wenn ich nur einen Index auf "Modelle" setze, wird Firebase den Index auf beide Sammlungen anwenden. Muss ich allen meinen Sammlungen eindeutige Namen geben, wenn ich sie unabhängig voneinander indizieren möchte? – zevdg

Verwandte Themen