Как создать индексы вложенных коллекций в Cloud Firestore?
я погуглил и проверил документацию Cloud Firestore и ничего не нашел о том, как объявить индексы вложенных коллекций. Я объявил нечто подобное
...{
"collectionId": "user/{uid}/feeds",
"fields": [..]
}...
и на вкладке индексы он хранится следующим образом
__escuser~1{uid}~1feeds__
не знаю, правильно ли я его создал или нет.
2 ответов
когда вы идете, чтобы создать индекс, он фактически говорит вам запустить запрос, который вы хотите создать индекс один раз вручную, а затем он будет генерировать URL, который вы можете скопировать вставить в браузер и вуаля!
вот как вы это делаете:
- создать новый dir
npm init
npm i --save firebase-admin
- создать
index.js
-
поместите следующую функцию в документ
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
это выплюнет что-то вроде этого:
{ 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 ...}
скопируйте ссылку и вставьте ее в браузер.
обновление
чтобы добавить индекс вручную (через CLI), вы можете сделать следующее:
{
"indexes": [
{
"collectionId": "feed",
"fields": [
{ "fieldPath": "read", "mode": "ASCENDING" },
{ "fieldPath": "timestamp", "mode": "ASCENDING" },
...
]
}
]
}
или просто зайдите в админ панель в вашей базе данных и добавьте индекс для кормов там.
на это, похоже, отвечает @michael-bleigh здесь:https://stackoverflow.com/a/47165007/2511985
индексы Cloud Firestore основаны на названия, а не полные пути сбора. Поэтому, если вы хотите создать индексы на
users/{id}/messages
правильный способ сделать это, чтобы создать индексmessages
.