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!
Đây là cách bạn làm điều đó:
- Tạo một thư mục mới
npm init
npm i --save firebase-admin
- Tạo
index.js
Đặ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();
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.
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 đó.
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? –
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
@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