2017-10-31 31 views
7

Tôi đã googled và kiểm tra tài liệu Cloud Firestore và không tìm thấy gì về cách khai báo các chỉ mục bộ sưu tập con. Tôi đã tuyên bố một cái gì đó như thế nàyLàm cách nào để tạo chỉ mục con của Cloud Firestore?

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

và trong tab chỉ số nó được lưu trữ như thế này

__escuser~1{uid}~1feeds__ 

Không có ý tưởng nếu tôi tạo đúng hay không.

+0

Xin lỗi, bạn có thể làm rõ ý nghĩa của "chỉ mục phụ" không? Bạn đang cố làm gì vậy? –

+0

có bộ sưu tập người dùng và mỗi bộ sưu tập 'người dùng' có một bộ sưu tập' nguồn cấp dữ liệu' khác và tôi không thể thêm chỉ mục cho các bộ sưu tập phụ ~ https://firebase.google.com/docs/firestore/query-data/indexing – Shaxrillo

+0

@Shaxrillo Tôi đã thấy đề cập đến một nơi nào đó rằng tính năng này đã được lên kế hoạch nhưng chưa được triển khai. Và nó sẽ không được thực hiện trong phiên bản beta. Tôi cũng muốn tính năng này – Thaina

Trả lời

7

Khi bạn tạo chỉ mục, nó thực sự yêu cầu bạn chạy truy vấn bạn muốn tạo chỉ mục một lần theo cách thủ công và sau đó nó sẽ tạo URL mà bạn có thể sao chép dán vào trình duyệt và thì đấy!

enter image description here

Đây là cách bạn làm điều đó:

  1. Tạo một thư mục mới
  2. npm init
  3. npm i --save firebase-admin
  4. Tạo index.js
  5. Đặt chức năng sau đây trong các tài liệu

    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

này sẽ nhổ someting như thế này ra:

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

Sao chép liên kết và dán nó vào trình duyệt của bạn.

enter image description here

Cập nhật

Để thêm chỉ số bằng tay (thông qua CLI), bạn có thể làm như sau:

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

Hoặc đơn giản là đi vào bảng quản trị trong cơ sở dữ liệu của bạn và thêm chỉ mục cho nguồn cấp dữ liệu tại đó.

+0

Cảm ơn bạn @ Chris Nhưng tôi muốn thêm nó theo cách thủ công không phải do url được tạo tự động – Shaxrillo

+0

Ok, nó sẽ là kết quả tương tự bất kể, nhưng hãy xem ở trên. Bạn không chỉ định 'đường dẫn phụ con' nhưng chỉ là id thu thập @Shaxrillo – Chris

+1

@Chris, nhưng "id bộ sưu tập" là gì? Tôi có nhiều bộ sưu tập có cùng tên trong các phần khác nhau của hệ thống phân cấp linh hoạt của tôi. ví dụ./ cars/{carIds}/models và/magazine/{magazineId}/models Nếu tôi chỉ đặt một chỉ mục trên "mô hình" thì firebase sẽ áp dụng chỉ mục cho cả hai bộ sưu tập này? Tôi có phải cung cấp cho tất cả các bộ sưu tập của mình các tên duy nhất nếu tôi muốn có thể lập chỉ mục chúng độc lập với nhau không? – zevdg

Các vấn đề liên quan