📝 Azure Cosmos DB でソートしようとするとフリーズする
MongoDB 用 API で Azure CosmosDB 向けの開発を行っていたのですが、sort 実行時にエラーが発生してしまいリソースが取得できなくなる問題が発生してしまいました。 結論から言ってしまうと、この Stack Overflow の回答 通り対処すれば解決可能なのですが、簡易的に日本語でも解決策を記しておきます。 また、本記事内容の問題に遭遇したときに見つけたのですが、事前に Azure CosmosDB の Docker イメージ を利用しておけば、CosmosDB 特有の挙動に気づけるようになるかもしれません。私は MongoDB の Docker イメージ を利用して開発や動作検証を行っておりました。 公式サイトでの MongoDB 用 API でのインデックス管理 についての記事を見ていくと下記の文言が出てきます。 クエリに並べ替えを適用するには、並べ替え操作で使用されるフィールドに対してインデックスを作成する必要があります。 そのため、例えば MongoDB の ORM である Mongoose の利用例でいうと、スキーマを定義する際に下記のようにソートに利用したいキーに対してインデックスを指定する必要があります。 @Schema({ timestamps: { createdAt: "created_at", updatedAt: "updated_at" } }) export class TestSchema1 extends Document { _id: string; // ソートしたいキーには index を付ける @Prop({ index: true }) sort!: number; } const schema = SchemaFactory.createForClass(TestSchema1); export const TestSchema1 = schema; また、範囲検索を行いたい場合は各キーにインデックスを作成することで可能になります。 @Schema({ timestamps: { createdAt: "created_at", updatedAt: "updated_at" } }) export class TestSchema2 extends Document { _id: string; @Prop() start_at: Date; @Prop() end_at: Date; } // start_at と end_at で範囲検索を行いたいため、 // それぞれに unique インデックスを作成している const schema = SchemaFactory.createForClass(TestSchema2) .index({ start_at: 1 }, { unique: true }) .index({ end_at: 1 }, { unique: true }); export const TestSchema2 = schema; 地味な Tips のような記事ですが、割とハマりました。。この記事が同じ轍を踏んでしまっている方の参考になれれば幸いです 😇 ...