マイコン温度通知システムの製作15 監視機能のエラー(複合インデックス)

データベース監視プログラムのエラー(複合インデックス)

データベースを監視し、一定時間更新されていないと警告を出すコードでエラーが出ていました。

・コード

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のログで以下のようにエラーが出ていました。

こちらも上記のように修正したところエラーは解消されました。

タイトルとURLをコピーしました