@probitas/client-mongodb
MongoDB client for Probitas scenario testing framework.
This package provides a MongoDB client designed for integration testing of applications using MongoDB.
Features
- CRUD Operations: find, findOne, insertOne, insertMany, updateOne, updateMany, deleteOne, deleteMany
- Aggregations: Full aggregation pipeline support
- Sessions: Transaction support with sessions
- Type Safety: Generic type parameters for document types
- Resource Management: Implements
AsyncDisposablefor proper cleanup
Installation
deno add jsr:@probitas/client-mongodb
Quick Start
import { createMongoClient } from "@probitas/client-mongodb";
const client = await createMongoClient({
url: "mongodb://localhost:27017",
database: "testdb",
});
// Get a collection
const users = client.collection<{ name: string; email: string }>("users");
// Insert a document
const insertResult = await users.insertOne({ name: "Alice", email: "alice@example.com" });
console.log("Inserted ID:", insertResult.insertedId);
// Find documents
const findResult = await users.find({ name: "Alice" });
console.log("Found:", findResult.documents);
// Find one document
const user = await users.findOne({ name: "Alice" });
console.log("User:", user?.document);
await client.close();
Transactions
await client.withSession(async (session) => {
session.startTransaction();
try {
const accounts = client.collection("accounts");
await accounts.updateOne(
{ _id: "from" },
{ $inc: { balance: -100 } },
{ session }
);
await accounts.updateOne(
{ _id: "to" },
{ $inc: { balance: 100 } },
{ session }
);
await session.commitTransaction();
} catch (error) {
await session.abortTransaction();
throw error;
}
});
Using with using Statement
await using client = await createMongoClient({
url: "mongodb://localhost:27017",
database: "testdb",
});
const result = await client.collection("test").findOne({});
// Client automatically closed when block exits
Related Packages
| Package | Description |
|---|---|
@probitas/client |
Core utilities and types |
Links
Installation
deno add jsr:@probitas/client-mongodbClasses
#MongoConnectionError
class MongoConnectionError extends MongoErrorMongoErrorError thrown when a MongoDB connection cannot be established.
Constructor
new MongoConnectionError(message: string, options?: MongoErrorOptions)Properties
- readonly
namestring - readonly
kind"connection"
#MongoDuplicateKeyError
class MongoDuplicateKeyError extends MongoErrorMongoErrorError thrown when a duplicate key constraint is violated.
| Name | Description |
|---|---|
name | — |
kind | — |
keyPattern | — |
keyValue | — |
Constructor
new MongoDuplicateKeyError(message: string, keyPattern: Record<string, number>, keyValue: Record<string, unknown>, options?: MongoErrorOptions)Properties
- readonly
namestring - readonly
kind"duplicate_key" - readonly
keyPatternRecord<string, number> - readonly
keyValueRecord<string, unknown>
#MongoError
class MongoError extends ClientErrorClientErrorBase error class for MongoDB client errors.
Constructor
new MongoError(message: string, _: unknown, options?: MongoErrorOptions)Properties
- readonly
namestring - readonly
code?number
#MongoNotFoundError
class MongoNotFoundError extends MongoErrorMongoErrorError thrown when a document is not found (for firstOrThrow, lastOrThrow).
Constructor
new MongoNotFoundError(message: string, options?: MongoErrorOptions)Properties
- readonly
namestring - readonly
kind"not_found"
#MongoQueryError
class MongoQueryError extends MongoErrorMongoErrorError thrown when a MongoDB query fails.
| Name | Description |
|---|---|
name | — |
kind | — |
collection | — |
Constructor
new MongoQueryError(message: string, collection: string, options?: MongoErrorOptions)Properties
- readonly
namestring - readonly
kind"query" - readonly
collectionstring
#MongoValidationError
class MongoValidationError extends MongoErrorMongoErrorError thrown when document validation fails.
| Name | Description |
|---|---|
name | — |
kind | — |
validationErrors | — |
Constructor
new MongoValidationError(message: string, validationErrors: readonly string[], options?: MongoErrorOptions)Properties
- readonly
namestring - readonly
kind"validation" - readonly
validationErrorsreadonly string[]
#MongoWriteError
class MongoWriteError extends MongoErrorMongoErrorError thrown when a write operation fails.
| Name | Description |
|---|---|
name | — |
kind | — |
writeErrors | — |
Constructor
new MongoWriteError(message: string, writeErrors: readonly { index: number; code: number; message: string }[], options?: MongoErrorOptions)Properties
- readonly
namestring - readonly
kind"write" - readonly
writeErrorsreadonly { index: number; code: number; message: string }[]
Interfaces
#MongoClient
interface MongoClient extends AsyncDisposableMongoDB client interface
| Name | Description |
|---|---|
config | — |
collection() | — |
db() | — |
transaction() | — |
close() | — |
Properties
Methods
collection<T extends Document = Document>(name: string): MongoCollection<T>Parameters
namestring
db(name: string): MongoClientParameters
namestring
transaction<T>(fn: (session: MongoSession) => unknown): Promise<T>Parameters
fn(session: MongoSession) => unknown
close(): Promise<void>#MongoClientConfig
interface MongoClientConfig extends CommonOptionsMongoDB client configuration.
Examples
Using a connection string
const config: MongoClientConfig = {
url: "mongodb://localhost:27017",
database: "testdb",
};
Using a configuration object
const config: MongoClientConfig = {
url: {
host: "localhost",
port: 27017,
username: "admin",
password: "secret",
authSource: "admin",
},
database: "testdb",
};
| Name | Description |
|---|---|
url | MongoDB connection URL or configuration object. |
database | Database name to connect to. |
Properties
MongoDB connection URL or configuration object.
- readonly
databasestringDatabase name to connect to.
#MongoCollection
interface MongoCollection<T extends Document>MongoDB collection interface
| Name | Description |
|---|---|
find() | — |
findOne() | — |
insertOne() | — |
insertMany() | — |
updateOne() | — |
updateMany() | — |
deleteOne() | — |
deleteMany() | — |
aggregate() | — |
countDocuments() | — |
Methods
find(filter?: Filter, options?: MongoFindOptions): Promise<MongoFindResult<T>>Parameters
filter?Filteroptions?MongoFindOptions
findOne(filter: Filter, options?: CommonOptions): Promise<MongoFindOneResult<T>>Parameters
filterFilteroptions?CommonOptions
insertOne(doc: Omit<T, "_id">, options?: CommonOptions): Promise<MongoInsertOneResult>Parameters
docOmit<T, "_id">options?CommonOptions
insertMany(docs: Omit<T, "_id">[], options?: CommonOptions): Promise<MongoInsertManyResult>Parameters
docsOmit<T, "_id">[]options?CommonOptions
updateOne(filter: Filter, update: UpdateFilter, options?: MongoUpdateOptions): Promise<MongoUpdateResult>Parameters
filterFilterupdateUpdateFilteroptions?MongoUpdateOptions
updateMany(filter: Filter, update: UpdateFilter, options?: MongoUpdateOptions): Promise<MongoUpdateResult>Parameters
filterFilterupdateUpdateFilteroptions?MongoUpdateOptions
deleteOne(filter: Filter, options?: CommonOptions): Promise<MongoDeleteResult>Parameters
filterFilteroptions?CommonOptions
deleteMany(filter: Filter, options?: CommonOptions): Promise<MongoDeleteResult>Parameters
filterFilteroptions?CommonOptions
aggregate<R = T>(pipeline: Document[], options?: CommonOptions): Promise<MongoFindResult<R>>Parameters
pipelineDocument[]options?CommonOptions
countDocuments(filter?: Filter, options?: CommonOptions): Promise<MongoCountResult>Parameters
filter?Filteroptions?CommonOptions
#MongoConnectionConfig
interface MongoConnectionConfig extends CommonConnectionConfigMongoDB connection configuration.
Extends CommonConnectionConfig with MongoDB-specific options.
| Name | Description |
|---|---|
database | Database name to connect to. |
authSource | Authentication database. |
replicaSet | Replica set name. |
Properties
- readonly
database?stringDatabase name to connect to.
- readonly
authSource?stringAuthentication database.
- readonly
replicaSet?stringReplica set name.
#MongoCountResult
interface MongoCountResultCount result
Properties
- readonly
type"mongo:count" - readonly
okboolean - readonly
countnumber - readonly
durationnumber
#MongoDeleteResult
interface MongoDeleteResultDelete result
| Name | Description |
|---|---|
type | — |
ok | — |
deletedCount | — |
duration | — |
Properties
- readonly
type"mongo:delete" - readonly
okboolean - readonly
deletedCountnumber - readonly
durationnumber
#MongoDocs
interface MongoDocs<T> extends ReadonlyArray<T>Document array with first/last methods
| Name | Description |
|---|---|
first() | — |
firstOrThrow() | — |
last() | — |
lastOrThrow() | — |
Methods
first(): T | undefinedfirstOrThrow(): Tlast(): T | undefinedlastOrThrow(): T#MongoErrorOptions
interface MongoErrorOptions extends ErrorOptionsOptions for MongoDB errors.
| Name | Description |
|---|---|
code | — |
Properties
- readonly
code?number
#MongoFindOneResult
interface MongoFindOneResult<T = Document>FindOne result
Properties
- readonly
type"mongo:find-one" - readonly
okboolean - readonly
docT | undefined - readonly
durationnumber
#MongoFindOptions
interface MongoFindOptions extends CommonOptionsMongoDB find options
| Name | Description |
|---|---|
sort | — |
limit | — |
skip | — |
projection | — |
Properties
- readonly
sort?Record<string, 1 | -1> - readonly
limit?number - readonly
skip?number - readonly
projection?Record<string, 0 | 1>
#MongoFindResult
interface MongoFindResult<T = Document>Query result (find, aggregate)
Properties
- readonly
type"mongo:find" - readonly
okboolean - readonly
durationnumber
#MongoInsertManyResult
interface MongoInsertManyResultInsert many result
| Name | Description |
|---|---|
type | — |
ok | — |
insertedIds | — |
insertedCount | — |
duration | — |
Properties
- readonly
type"mongo:insert" - readonly
okboolean - readonly
insertedIdsreadonly string[] - readonly
insertedCountnumber - readonly
durationnumber
#MongoInsertOneResult
interface MongoInsertOneResultInsert one result
| Name | Description |
|---|---|
type | — |
ok | — |
insertedId | — |
duration | — |
Properties
- readonly
type"mongo:insert" - readonly
okboolean - readonly
insertedIdstring - readonly
durationnumber
#MongoSession
interface MongoSessionMongoDB session interface (for transactions)
| Name | Description |
|---|---|
collection() | — |
Methods
collection<T extends Document = Document>(name: string): MongoCollection<T>Parameters
namestring
#MongoUpdateOptions
interface MongoUpdateOptions extends CommonOptionsMongoDB update options
| Name | Description |
|---|---|
upsert | — |
Properties
- readonly
upsert?boolean
#MongoUpdateResult
interface MongoUpdateResultUpdate result
| Name | Description |
|---|---|
type | — |
ok | — |
matchedCount | — |
modifiedCount | — |
upsertedId | — |
duration | — |
Properties
- readonly
type"mongo:update" - readonly
okboolean - readonly
matchedCountnumber - readonly
modifiedCountnumber - readonly
upsertedId?string - readonly
durationnumber
Functions
#createMongoClient
async function createMongoClient(config: MongoClientConfig): Promise<MongoClient>Create a new MongoDB client instance.
The client provides typed collection access, aggregation pipelines, transaction support, and comprehensive CRUD operations.
Parameters
configMongoClientConfig- MongoDB client configuration
Returns
Promise<MongoClient> — A promise resolving to a new MongoDB client instance
Examples
Basic usage with connection string
const mongo = await createMongoClient({
url: "mongodb://localhost:27017",
database: "testdb",
});
const users = mongo.collection<{ name: string; age: number }>("users");
const result = await users.find({ age: { $gte: 18 } });
console.log(result.docs.first());
await mongo.close();
Using connection config object
const mongo = await createMongoClient({
url: {
host: "localhost",
port: 27017,
username: "admin",
password: "secret",
authSource: "admin",
},
database: "testdb",
});
Insert and query documents
const users = mongo.collection<User>("users");
// Insert a document
const insertResult = await users.insertOne({ name: "Alice", age: 30 });
console.log("Inserted ID:", insertResult.insertedId);
// Find documents with projection and sorting
const findResult = await users.find(
{ age: { $gte: 25 } },
{ sort: { name: 1 }, limit: 10 }
);
console.log("Found:", findResult.documents.length);
Transaction with auto-commit/rollback
await mongo.transaction(async (session) => {
const users = session.collection<User>("users");
await users.insertOne({ name: "Bob", age: 25 });
await users.updateOne({ name: "Alice" }, { $inc: { age: 1 } });
});
Aggregation pipeline
const result = await users.aggregate<{ _id: string; avgAge: number }>([
{ $group: { _id: "$department", avgAge: { $avg: "$age" } } },
{ $sort: { avgAge: -1 } },
]);
Using await using for automatic cleanup
await using mongo = await createMongoClient({
url: "mongodb://localhost:27017",
database: "testdb",
});
const result = await mongo.collection("users").find({});
// Client automatically closed when scope exits
#createMongoDocs
function createMongoDocs<T>(items: T[]): MongoDocs<T>Create a MongoDocs array from a regular array.
Parameters
itemsT[]
Type Aliases
#Filter
type Filter = Record<string, any>MongoDB filter type (simplified for compatibility with mongodb driver) Allows query operators like $gte, $lt, $in, etc.
#MongoResult
type MongoResult<T = any> = MongoFindResult<T> | MongoInsertOneResult | MongoInsertManyResult | MongoUpdateResult | MongoDeleteResult | MongoFindOneResult<T> | MongoCountResultUnion of all MongoDB result types.
#UpdateFilter
type UpdateFilter = Record<string, any>MongoDB update filter type (simplified for compatibility with mongodb driver) Allows update operators like $set, $inc, $unset, etc.
