From 2628743c0928932ef767285c75f19360d1d4c1c1 Mon Sep 17 00:00:00 2001 From: Alex Lubbock Date: Fri, 8 May 2026 22:07:43 +0100 Subject: [PATCH 1/3] perf: add datasetId index to OrigDatablock and Datablock collections All $lookup pipelines joining datasets to their blocks filter on datasetId, causing a full collection scan per parent document without this index (PERF-001). --- src/datablocks/schemas/datablock.schema.ts | 2 ++ src/origdatablocks/schemas/origdatablock.schema.ts | 1 + 2 files changed, 3 insertions(+) diff --git a/src/datablocks/schemas/datablock.schema.ts b/src/datablocks/schemas/datablock.schema.ts index abf68757a..58ec1982b 100644 --- a/src/datablocks/schemas/datablock.schema.ts +++ b/src/datablocks/schemas/datablock.schema.ts @@ -109,3 +109,5 @@ export class Datablock extends OwnableClass { } export const DatablockSchema = SchemaFactory.createForClass(Datablock); + +DatablockSchema.index({ datasetId: 1 }); diff --git a/src/origdatablocks/schemas/origdatablock.schema.ts b/src/origdatablocks/schemas/origdatablock.schema.ts index 3ed0e33a5..f127a8648 100644 --- a/src/origdatablocks/schemas/origdatablock.schema.ts +++ b/src/origdatablocks/schemas/origdatablock.schema.ts @@ -74,3 +74,4 @@ export class OrigDatablock extends OwnableClass { export const OrigDatablockSchema = SchemaFactory.createForClass(OrigDatablock); OrigDatablockSchema.index({ "$**": "text" }); +OrigDatablockSchema.index({ datasetId: 1 }); From 9b2a5b97f6e1a4d37215b9373df896bd9adc9baf Mon Sep 17 00:00:00 2001 From: Alex Lubbock Date: Fri, 8 May 2026 22:23:34 +0100 Subject: [PATCH 2/3] test: add regression tests for datasetId index on block schemas --- src/datablocks/schemas/datablock.schema.spec.ts | 8 ++++++++ .../schemas/origdatablock.schema.spec.ts | 10 ++++++++++ 2 files changed, 18 insertions(+) create mode 100644 src/datablocks/schemas/datablock.schema.spec.ts create mode 100644 src/origdatablocks/schemas/origdatablock.schema.spec.ts diff --git a/src/datablocks/schemas/datablock.schema.spec.ts b/src/datablocks/schemas/datablock.schema.spec.ts new file mode 100644 index 000000000..29fdf9502 --- /dev/null +++ b/src/datablocks/schemas/datablock.schema.spec.ts @@ -0,0 +1,8 @@ +import { DatablockSchema } from "./datablock.schema"; + +describe("DatablockSchema", () => { + it("should have an index on datasetId", () => { + const indexFields = DatablockSchema.indexes().map(([fields]) => fields); + expect(indexFields).toContainEqual({ datasetId: 1 }); + }); +}); diff --git a/src/origdatablocks/schemas/origdatablock.schema.spec.ts b/src/origdatablocks/schemas/origdatablock.schema.spec.ts new file mode 100644 index 000000000..83fd91d3c --- /dev/null +++ b/src/origdatablocks/schemas/origdatablock.schema.spec.ts @@ -0,0 +1,10 @@ +import { OrigDatablockSchema } from "./origdatablock.schema"; + +describe("OrigDatablockSchema", () => { + it("should have an index on datasetId", () => { + const indexFields = OrigDatablockSchema.indexes().map( + ([fields]) => fields, + ); + expect(indexFields).toContainEqual({ datasetId: 1 }); + }); +}); From 73d0576a8c31256cca1e32385bdef4ffff3e995b Mon Sep 17 00:00:00 2001 From: Alex Lubbock Date: Fri, 8 May 2026 22:59:51 +0100 Subject: [PATCH 3/3] style: fix prettier formatting in origdatablock schema spec --- src/origdatablocks/schemas/origdatablock.schema.spec.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/origdatablocks/schemas/origdatablock.schema.spec.ts b/src/origdatablocks/schemas/origdatablock.schema.spec.ts index 83fd91d3c..18c5b2077 100644 --- a/src/origdatablocks/schemas/origdatablock.schema.spec.ts +++ b/src/origdatablocks/schemas/origdatablock.schema.spec.ts @@ -2,9 +2,7 @@ import { OrigDatablockSchema } from "./origdatablock.schema"; describe("OrigDatablockSchema", () => { it("should have an index on datasetId", () => { - const indexFields = OrigDatablockSchema.indexes().map( - ([fields]) => fields, - ); + const indexFields = OrigDatablockSchema.indexes().map(([fields]) => fields); expect(indexFields).toContainEqual({ datasetId: 1 }); }); });