データベース監視プログラムのエラー(複合インデックス)
データベースを監視し、一定時間更新されていないと警告を出すコードでエラーが出ていました。
・コード
for (const macAddress of macAddressList) {
// 最新のデータクエリ
const latestRecordSnapshot = await db
.collection("temperatureData")
.where("macAddress", "==", macAddress)
.orderBy("timestamp", "desc")
.limit(1)
.get();
・Firebaseのログ
{
"textPayload": "Error: 9 FAILED_PRECONDITION: The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/temperature-measurement-b3fcd/firestore/indexes?create_composite=CmVwcm9qZWN0cy90ZW1wZXJhdHVyZS1tZWFzdXJlbWVudC1iM2ZjZC9kYXRhYmFzZXMvKGRlZmF1bHQpL2NvbGxlY3Rpb25Hcm91cHMvdGVtcGVyYXR1cmVEYXRhL2luZGV4ZXMvXxABGg4KCm1hY0FkZHJlc3MQARoNCgl0aW1lc3RhbXAQAhoMCghfX25hbWVfXxAC\n at callErrorFromStatus (/workspace/node_modules/@grpc/grpc-js/build/src/call.js:31:19)\n at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client.js:357:73)\n at Object.onReceiveStatus (/workspace/node_modules/@grpc/grpc-js/build/src/client-interceptors.js:323:181)\n at /workspace/node_modules/@grpc/grpc-js/build/src/resolving-call.js:94:78\n at process.processTicksAndRejections (node:internal/process/task_queues:77:11)",
"insertId": "65f2f0980007f39087788943",
コードであるような複数のクエリを必要とする複合インデックスは、Firebaseのコンソールで手動で複合インデックスを作成する必要があります。
コードと同じ内容のインデックスを作成します。
上記のインデックスはコードをデプロイすると消去されたことがあったので注意が必要です。
実際、忘れていてコードをデプロイし直したとき、firebaseのログで以下のようにエラーが出ていました。
こちらも上記のように修正したところエラーは解消されました。