Skip to main content

Store

The Store class provides a type-safe interface for MongoDB collections with built-in schema validation and helper methods.

Stores allow you to:

  • Define type-safe schemas for your data
  • Handle CRUD operations with MongoDB
  • Add custom methods to your documents
  • Configure MongoDB indexes

API Reference

modelence


modelence / server / Store

Class: Store<TSchema, TMethods>

Defined in: src/data/store.ts:50

The Store class provides a type-safe interface for MongoDB collections with built-in schema validation and helper methods.

Example

const dbTodos = new Store('todos', {
schema: {
title: schema.string(),
completed: schema.boolean(),
dueDate: schema.date().optional(),
userId: schema.userId(),
},
methods: {
isOverdue() {
return this.dueDate < new Date();
}
}
});

Type Parameters

TSchema

TSchema extends ModelSchema

The document schema type

TMethods

TMethods extends Record<string, (this, ...args) => any>

Custom methods that will be added to documents

Constructors

Constructor

new Store<TSchema, TMethods>(name, options): Store<TSchema, TMethods>

Defined in: src/data/store.ts:76

Creates a new Store instance

Parameters

name

string

The collection name in MongoDB

options

Store configuration

indexes

IndexDescription[]

MongoDB indexes to create

methods?

TMethods

Custom methods to add to documents

schema

TSchema

Document schema using Modelence schema types

Returns

Store<TSchema, TMethods>

Methods

aggregate()

aggregate(pipeline, options?): AggregationCursor<Document>

Defined in: src/data/store.ts:324

Aggregates documents using MongoDB's aggregation framework

Parameters

pipeline

Document[]

The aggregation pipeline

options?

AggregateOptions

Optional options

Returns

AggregationCursor<Document>

The aggregation cursor


bulkWrite()

bulkWrite(operations): Promise<BulkWriteResult>

Defined in: src/data/store.ts:334

Performs a bulk write operation on the collection

Parameters

operations

AnyBulkWriteOperation<InferDocumentType<TSchema>>[]

The operations to perform

Returns

Promise<BulkWriteResult>

The result of the bulk write operation


deleteMany()

deleteMany(selector): Promise<DeleteResult>

Defined in: src/data/store.ts:313

Deletes multiple documents

Parameters

selector

Filter<InferDocumentType<TSchema>>

The selector to find the documents to delete

Returns

Promise<DeleteResult>

The result of the delete operation


deleteOne()

deleteOne(selector): Promise<DeleteResult>

Defined in: src/data/store.ts:303

Deletes a single document

Parameters

selector

Filter<InferDocumentType<TSchema>>

The selector to find the document to delete

Returns

Promise<DeleteResult>

The result of the delete operation


fetch()

fetch(query, options?): Promise<EnhancedOmit<InferDocumentType<TSchema>, "_id"> & object & TMethods[]>

Defined in: src/data/store.ts:221

Fetches multiple documents, equivalent to Node.js MongoDB driver's find and toArray methods combined.

Parameters

query

Filter<InferDocumentType<TSchema>>

The query to filter documents

options?

Optional options

limit?

number

skip?

number

sort?

Document

Returns

Promise<EnhancedOmit<InferDocumentType<TSchema>, "_id"> & object & TMethods[]>

The documents


findById()

findById(id): Promise<
| null
| EnhancedOmit<InferDocumentType<TSchema>, "_id"> & object & TMethods>

Defined in: src/data/store.ts:194

Fetches a single document by its ID

Parameters

id

The ID of the document to find

string | ObjectId

Returns

Promise< | null | EnhancedOmit<InferDocumentType<TSchema>, "_id"> & object & TMethods>

The document, or null if not found


findOne()

findOne(query, options?): Promise<
| null
| EnhancedOmit<InferDocumentType<TSchema>, "_id"> & object & TMethods>

Defined in: src/data/store.ts:153

Parameters

query

Filter<InferDocumentType<TSchema>>

options?

FindOptions<Document>

Returns

Promise< | null | EnhancedOmit<InferDocumentType<TSchema>, "_id"> & object & TMethods>


getDatabase()

getDatabase(): Db

Defined in: src/data/store.ts:343

Returns the raw MongoDB database instance for advanced operations

Returns

Db

The MongoDB database instance

Throws

Error if the store is not provisioned


getName()

getName(): string

Defined in: src/data/store.ts:93

Returns

string


insertMany()

insertMany(documents): Promise<InsertManyResult<Document>>

Defined in: src/data/store.ts:242

Inserts multiple documents

Parameters

documents

OptionalUnlessRequiredId<InferDocumentType<TSchema>>[]

The documents to insert

Returns

Promise<InsertManyResult<Document>>

The result of the insert operation


insertOne()

insertOne(document): Promise<InsertOneResult<Document>>

Defined in: src/data/store.ts:232

Inserts a single document

Parameters

document

OptionalUnlessRequiredId<InferDocumentType<TSchema>>

The document to insert

Returns

Promise<InsertOneResult<Document>>

The result of the insert operation


rawCollection()

rawCollection(): Collection<InferDocumentType<TSchema>>

Defined in: src/data/store.ts:352

Returns the raw MongoDB collection instance for advanced operations

Returns

Collection<InferDocumentType<TSchema>>

The MongoDB collection instance

Throws

Error if the store is not provisioned


renameFrom()

renameFrom(oldName, options?): Promise<void>

Defined in: src/data/store.ts:361

Renames an existing collection to this store's name, used for migrations

Parameters

oldName

string

The previous name of the collection

options?
session?

ClientSession

Returns

Promise<void>

Throws

Error if the old collection doesn't exist or if this store's collection already exists


requireById()

requireById(id, errorHandler?): Promise<EnhancedOmit<InferDocumentType<TSchema>, "_id"> & object & TMethods>

Defined in: src/data/store.ts:206

Fetches a single document by its ID, or throws an error if not found

Parameters

id

The ID of the document to find

string | ObjectId

errorHandler?

() => Error

Optional error handler to return a custom error if the document is not found

Returns

Promise<EnhancedOmit<InferDocumentType<TSchema>, "_id"> & object & TMethods>

The document


requireOne()

requireOne(
query,
options?,
errorHandler?): Promise<EnhancedOmit<InferDocumentType<TSchema>, "_id"> & object & TMethods>

Defined in: src/data/store.ts:161

Parameters

query

Filter<InferDocumentType<TSchema>>

options?

FindOptions<Document>

errorHandler?

() => Error

Returns

Promise<EnhancedOmit<InferDocumentType<TSchema>, "_id"> & object & TMethods>


updateMany()

updateMany(
selector,
update,
options?): Promise<UpdateResult<Document>>

Defined in: src/data/store.ts:278

Updates multiple documents

Parameters

selector

Filter<InferDocumentType<TSchema>>

The selector to find the documents to update

update

UpdateFilter<InferDocumentType<TSchema>>

The MongoDB modifier to apply to the documents

options?
session?

ClientSession

Returns

Promise<UpdateResult<Document>>

The result of the update operation


updateOne()

updateOne(selector, update): Promise<UpdateResult<Document>>

Defined in: src/data/store.ts:253

Updates a single document

Parameters

selector

The selector to find the document to update

string | Filter<InferDocumentType<TSchema>>

update

UpdateFilter<InferDocumentType<TSchema>>

The update to apply to the document

Returns

Promise<UpdateResult<Document>>

The result of the update operation


upsertMany()

upsertMany(selector, update): Promise<UpdateResult<Document>>

Defined in: src/data/store.ts:293

Updates multiple documents, or inserts them if they don't exist

Parameters

selector

Filter<InferDocumentType<TSchema>>

The selector to find the documents to update

update

UpdateFilter<InferDocumentType<TSchema>>

The MongoDB modifier to apply to the documents

Returns

Promise<UpdateResult<Document>>

The result of the update operation


upsertOne()

upsertOne(selector, update): Promise<UpdateResult<Document>>

Defined in: src/data/store.ts:267

Updates a single document, or inserts it if it doesn't exist

Parameters

selector

Filter<InferDocumentType<TSchema>>

The selector to find the document to update

update

UpdateFilter<InferDocumentType<TSchema>>

The MongoDB modifier to apply to the document

Returns

Promise<UpdateResult<Document>>

The result of the update operation

Properties

Doc

readonly Doc: EnhancedOmit<InferDocumentType<TSchema>, "_id"> & object & TMethods;

Defined in: src/data/store.ts:61