@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 AsyncDisposable for 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" });
if (insertResult.ok) {
  console.log("Inserted ID:", insertResult.insertedId);
} else {
  console.error("Insert failed:", insertResult.error.message);
}

// Find documents
const findResult = await users.find({ name: "Alice" });
if (findResult.ok) {
  console.log("Found:", findResult.docs);
}

// Find one document
const user = await users.findOne({ name: "Alice" });
if (user.ok) {
  console.log("User:", user.doc);
}

await client.close();

Transactions

import { createMongoClient, type MongoSession } from "@probitas/client-mongodb";

const client = await createMongoClient({
  url: "mongodb://localhost:27017",
  database: "testdb",
});

await client.transaction(async (session: MongoSession) => {
  const accounts = client.collection("accounts");
  await accounts.updateOne(
    { _id: "from" },
    { $inc: { balance: -100 } },
  );
  await accounts.updateOne(
    { _id: "to" },
    { $inc: { balance: 100 } },
  );
});

await client.close();

Using with using Statement

import { createMongoClient } from "@probitas/client-mongodb";

await using client = await createMongoClient({
  url: "mongodb://localhost:27017",
  database: "testdb",
});

const result = await client.collection("test").findOne({});
console.log(result?.doc);
// Client automatically closed when block exits
PackageDescription
`@probitas/client`Core utilities and types

Installation

deno add jsr:@probitas/client-mongodb

Classes

class

#MongoConnectionError

class MongoConnectionError extends MongoError
ExtendsMongoError

Error thrown when a MongoDB connection cannot be established.

NameDescription
name
kind
Constructor
new MongoConnectionError(message: string, options?: MongoErrorOptions)
Properties
  • readonlynamestring
  • readonlykind"connection"
class

#MongoDuplicateKeyError

class MongoDuplicateKeyError extends MongoError
ExtendsMongoError

Error thrown when a duplicate key constraint is violated.

NameDescription
name
kind
keyPattern
keyValue
Constructor
new MongoDuplicateKeyError(
  message: string,
  keyPattern: Record<string, number>,
  keyValue: Record<string, unknown>,
  options?: MongoErrorOptions,
)
Properties
  • readonlynamestring
  • readonlykind"duplicate_key"
  • readonlykeyPatternRecord<string, number>
  • readonlykeyValueRecord<string, unknown>
class

#MongoError

class MongoError extends ClientError

Base error class for MongoDB client errors.

NameDescription
name
code
Constructor
new MongoError(message: string, _: unknown, options?: MongoErrorOptions)
Properties
  • readonlynamestring
  • readonlycode?number
class

#MongoNotFoundError

class MongoNotFoundError extends MongoError
ExtendsMongoError

Error thrown when a document is not found (for firstOrThrow, lastOrThrow).

NameDescription
name
kind
Constructor
new MongoNotFoundError(message: string, options?: MongoErrorOptions)
Properties
  • readonlynamestring
  • readonlykind"not_found"
class

#MongoQueryError

class MongoQueryError extends MongoError
ExtendsMongoError

Error thrown when a MongoDB query fails.

NameDescription
name
kind
collection
Constructor
new MongoQueryError(
  message: string,
  collection: string,
  options?: MongoErrorOptions,
)
Properties
  • readonlynamestring
  • readonlykind"query"
  • readonlycollectionstring
class

#MongoValidationError

class MongoValidationError extends MongoError
ExtendsMongoError

Error thrown when document validation fails.

NameDescription
name
kind
validationErrors
Constructor
new MongoValidationError(
  message: string,
  validationErrors: readonly string[],
  options?: MongoErrorOptions,
)
Properties
  • readonlynamestring
  • readonlykind"validation"
  • readonlyvalidationErrorsreadonly string[]
class

#MongoWriteError

class MongoWriteError extends MongoError
ExtendsMongoError

Error thrown when a write operation fails.

NameDescription
name
kind
writeErrors
Constructor
new MongoWriteError(
  message: string,
  writeErrors: readonly { index: number; code: number; message: string }[],
  options?: MongoErrorOptions,
)
Properties
  • readonlynamestring
  • readonlykind"write"
  • readonlywriteErrorsreadonly { index: number; code: number; message: string }[]

Interfaces

interface

#MongoClient

interface MongoClient extends AsyncDisposable

MongoDB client interface

NameDescription
config
collection()
db()
transaction()
close()
Properties
Methods
collection<T extends Document = Document>(name: string): MongoCollection<T>
Parameters
  • namestring
db(name: string): MongoClient
Parameters
  • namestring
transaction<T>(fn: (session: MongoSession) => unknown): Promise<T>
Parameters
close(): Promise<void>
interface

#MongoClientConfig

interface MongoClientConfig extends MongoOptions

MongoDB 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",
};
NameDescription
urlMongoDB connection URL or configuration object.
databaseDatabase name to connect to.
Properties
  • readonlyurlstring | MongoConnectionConfig

    MongoDB connection URL or configuration object.

  • readonlydatabasestring

    Database name to connect to.

interface

#MongoCollection

interface MongoCollection<T extends Document>

MongoDB collection interface

Methods
find(filter?: Filter, options?: MongoFindOptions): Promise<MongoFindResult<T>>
Parameters
findOne(filter: Filter, options?: MongoOptions): Promise<MongoFindOneResult<T>>
Parameters
insertOne(
  doc: Omit<T, "_id">,
  options?: MongoOptions,
): Promise<MongoInsertOneResult>
Parameters
insertMany(
  docs: Omit<T, "_id">[],
  options?: MongoOptions,
): Promise<MongoInsertManyResult>
Parameters
updateOne(
  filter: Filter,
  update: UpdateFilter,
  options?: MongoUpdateOptions,
): Promise<MongoUpdateResult>
Parameters
updateMany(
  filter: Filter,
  update: UpdateFilter,
  options?: MongoUpdateOptions,
): Promise<MongoUpdateResult>
Parameters
deleteOne(filter: Filter, options?: MongoOptions): Promise<MongoDeleteResult>
Parameters
deleteMany(filter: Filter, options?: MongoOptions): Promise<MongoDeleteResult>
Parameters
aggregate<R = T>(
  pipeline: Document[],
  options?: MongoOptions,
): Promise<MongoFindResult<R>>
Parameters
countDocuments(
  filter?: Filter,
  options?: MongoOptions,
): Promise<MongoCountResult>
Parameters
interface

#MongoConnectionConfig

interface MongoConnectionConfig extends CommonConnectionConfig

MongoDB connection configuration.

Extends CommonConnectionConfig with MongoDB-specific options.

NameDescription
databaseDatabase name to connect to.
authSourceAuthentication database.
replicaSetReplica set name.
Properties
  • readonlydatabase?string

    Database name to connect to.

  • readonlyauthSource?string

    Authentication database.

  • readonlyreplicaSet?string

    Replica set name.

interface

#MongoCountResultError

interface MongoCountResultError extends MongoCountResultBase

Count result with MongoDB error.

NameDescription
processed
ok
error
count
Properties
  • readonlyprocessedtrue
  • readonlyokfalse
  • readonlyerrorMongoError
  • readonlycountnull
interface

#MongoCountResultFailure

interface MongoCountResultFailure extends MongoCountResultBase

Count result with connection failure.

NameDescription
processed
ok
error
count
Properties
interface

#MongoCountResultSuccess

interface MongoCountResultSuccess extends MongoCountResultBase

Successful count result.

NameDescription
processed
ok
error
count
Properties
  • readonlyprocessedtrue
  • readonlyoktrue
  • readonlyerrornull
  • readonlycountnumber
interface

#MongoDeleteResultError

interface MongoDeleteResultError extends MongoDeleteResultBase

Delete result with MongoDB error.

NameDescription
processed
ok
error
deletedCount
Properties
  • readonlyprocessedtrue
  • readonlyokfalse
  • readonlyerrorMongoError
  • readonlydeletedCountnull
interface

#MongoDeleteResultFailure

interface MongoDeleteResultFailure extends MongoDeleteResultBase

Delete result with connection failure.

NameDescription
processed
ok
error
deletedCount
Properties
  • readonlyprocessedfalse
  • readonlyokfalse
  • readonlyerrorMongoFailureError
  • readonlydeletedCountnull
interface

#MongoDeleteResultSuccess

interface MongoDeleteResultSuccess extends MongoDeleteResultBase

Successful delete result.

NameDescription
processed
ok
error
deletedCount
Properties
  • readonlyprocessedtrue
  • readonlyoktrue
  • readonlyerrornull
  • readonlydeletedCountnumber
interface

#MongoErrorOptions

interface MongoErrorOptions extends ErrorOptions

Options for MongoDB errors.

NameDescription
code
Properties
  • readonlycode?number
interface

#MongoFindOneResultError

interface MongoFindOneResultError<T = Document> extends MongoFindOneResultBase<T>

FindOne result with MongoDB error.

NameDescription
processed
ok
error
doc
Properties
  • readonlyprocessedtrue
  • readonlyokfalse
  • readonlyerrorMongoError
  • readonlydocnull
interface

#MongoFindOneResultFailure

interface MongoFindOneResultFailure<T = Document> extends MongoFindOneResultBase<T>

FindOne result with connection failure.

NameDescription
processed
ok
error
doc
Properties
interface

#MongoFindOneResultSuccess

interface MongoFindOneResultSuccess<T = Document> extends MongoFindOneResultBase<T>

Successful findOne result.

NameDescription
processed
ok
error
doc
Properties
  • readonlyprocessedtrue
  • readonlyoktrue
  • readonlyerrornull
  • readonlydocT | null
interface

#MongoFindOptions

interface MongoFindOptions extends MongoOptions

MongoDB find options

NameDescription
sort
limit
skip
projection
Properties
  • readonlysort?Record<string, 1 | -1>
  • readonlylimit?number
  • readonlyskip?number
  • readonlyprojection?Record<string, 0 | 1>
interface

#MongoFindResultError

interface MongoFindResultError<T = Document> extends MongoFindResultBase<T>

Find result with MongoDB error.

NameDescription
processed
ok
error
docs
Properties
  • readonlyprocessedtrue
  • readonlyokfalse
  • readonlyerrorMongoError
  • readonlydocsreadonly T[]
interface

#MongoFindResultFailure

interface MongoFindResultFailure<T = Document> extends MongoFindResultBase<T>

Find result with connection failure.

NameDescription
processed
ok
error
docs
Properties
interface

#MongoFindResultSuccess

interface MongoFindResultSuccess<T = Document> extends MongoFindResultBase<T>

Successful find result.

NameDescription
processed
ok
error
docs
Properties
  • readonlyprocessedtrue
  • readonlyoktrue
  • readonlyerrornull
  • readonlydocsreadonly T[]
interface

#MongoInsertManyResultError

interface MongoInsertManyResultError extends MongoInsertManyResultBase

InsertMany result with MongoDB error.

NameDescription
processed
ok
error
insertedIds
insertedCount
Properties
  • readonlyprocessedtrue
  • readonlyokfalse
  • readonlyerrorMongoError
  • readonlyinsertedIdsnull
  • readonlyinsertedCountnull
interface

#MongoInsertManyResultFailure

interface MongoInsertManyResultFailure extends MongoInsertManyResultBase

InsertMany result with connection failure.

NameDescription
processed
ok
error
insertedIds
insertedCount
Properties
  • readonlyprocessedfalse
  • readonlyokfalse
  • readonlyerrorMongoFailureError
  • readonlyinsertedIdsnull
  • readonlyinsertedCountnull
interface

#MongoInsertManyResultSuccess

interface MongoInsertManyResultSuccess extends MongoInsertManyResultBase

Successful insertMany result.

NameDescription
processed
ok
error
insertedIds
insertedCount
Properties
  • readonlyprocessedtrue
  • readonlyoktrue
  • readonlyerrornull
  • readonlyinsertedIdsreadonly string[]
  • readonlyinsertedCountnumber
interface

#MongoInsertOneResultError

interface MongoInsertOneResultError extends MongoInsertOneResultBase

InsertOne result with MongoDB error.

NameDescription
processed
ok
error
insertedId
Properties
  • readonlyprocessedtrue
  • readonlyokfalse
  • readonlyerrorMongoError
  • readonlyinsertedIdnull
interface

#MongoInsertOneResultFailure

interface MongoInsertOneResultFailure extends MongoInsertOneResultBase

InsertOne result with connection failure.

NameDescription
processed
ok
error
insertedId
Properties
  • readonlyprocessedfalse
  • readonlyokfalse
  • readonlyerrorMongoFailureError
  • readonlyinsertedIdnull
interface

#MongoInsertOneResultSuccess

interface MongoInsertOneResultSuccess extends MongoInsertOneResultBase

Successful insertOne result.

NameDescription
processed
ok
error
insertedId
Properties
  • readonlyprocessedtrue
  • readonlyoktrue
  • readonlyerrornull
  • readonlyinsertedIdstring
interface

#MongoOptions

interface MongoOptions extends CommonOptions

Common options with throwOnError support.

NameDescription
throwOnErrorIf true, throws errors instead of returning them in the result.
Properties
  • readonlythrowOnError?boolean

    If true, throws errors instead of returning them in the result. If false (default), errors are returned in the result object.

interface

#MongoSession

interface MongoSession

MongoDB session interface (for transactions)

NameDescription
collection()
Methods
collection<T extends Document = Document>(name: string): MongoCollection<T>
Parameters
  • namestring
interface

#MongoUpdateOptions

interface MongoUpdateOptions extends MongoOptions

MongoDB update options

NameDescription
upsert
Properties
  • readonlyupsert?boolean
interface

#MongoUpdateResultError

interface MongoUpdateResultError extends MongoUpdateResultBase

Update result with MongoDB error.

Properties
  • readonlyprocessedtrue
  • readonlyokfalse
  • readonlyerrorMongoError
  • readonlymatchedCountnull
  • readonlymodifiedCountnull
  • readonlyupsertedIdnull
interface

#MongoUpdateResultFailure

interface MongoUpdateResultFailure extends MongoUpdateResultBase

Update result with connection failure.

Properties
  • readonlyprocessedfalse
  • readonlyokfalse
  • readonlyerrorMongoFailureError
  • readonlymatchedCountnull
  • readonlymodifiedCountnull
  • readonlyupsertedIdnull
interface

#MongoUpdateResultSuccess

interface MongoUpdateResultSuccess extends MongoUpdateResultBase

Successful update result.

Properties
  • readonlyprocessedtrue
  • readonlyoktrue
  • readonlyerrornull
  • readonlymatchedCountnumber
  • readonlymodifiedCountnumber
  • readonlyupsertedIdstring | null

Functions

function

#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
Returns

Promise<MongoClient> — A promise resolving to a new MongoDB client instance

Examples

Basic usage with connection string

import { createMongoClient } from "@probitas/client-mongodb";

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 } });

if (result.ok) {
  console.log(result.docs[0]);
} else {
  console.error("Error:", result.error.message);
}

await mongo.close();

Using connection config object

import { createMongoClient } from "@probitas/client-mongodb";

const mongo = await createMongoClient({
  url: {
    host: "localhost",
    port: 27017,
    username: "admin",
    password: "secret",
    authSource: "admin",
  },
  database: "testdb",
});

await mongo.close();

Insert and query documents

import { createMongoClient } from "@probitas/client-mongodb";

interface User { name: string; age: number }

const mongo = await createMongoClient({
  url: "mongodb://localhost:27017",
  database: "testdb",
});
const users = mongo.collection<User>("users");

// Insert a document
const insertResult = await users.insertOne({ name: "Alice", age: 30 });
if (insertResult.ok) {
  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 }
);
if (findResult.ok) {
  console.log("Found:", findResult.docs.length);
}

await mongo.close();

Transaction with auto-commit/rollback

import { createMongoClient } from "@probitas/client-mongodb";

interface User { _id?: unknown; name: string; age: number }

const mongo = await createMongoClient({
  url: "mongodb://localhost:27017",
  database: "testdb",
});

await mongo.transaction(async (session) => {
  const users = session.collection<User>("users");
  const insertResult = await users.insertOne({ name: "Bob", age: 25 });
  if (!insertResult.ok) throw insertResult.error;

  const updateResult = await users.updateOne(
    { name: "Alice" },
    { $inc: { age: 1 } }
  );
  if (!updateResult.ok) throw updateResult.error;
});

await mongo.close();

Aggregation pipeline

import { createMongoClient } from "@probitas/client-mongodb";

interface User { name: string; age: number; department: string }

const mongo = await createMongoClient({
  url: "mongodb://localhost:27017",
  database: "testdb",
});
const users = mongo.collection<User>("users");

const result = await users.aggregate<{ _id: string; avgAge: number }>([
  { $group: { _id: "$department", avgAge: { $avg: "$age" } } },
  { $sort: { avgAge: -1 } },
]);
if (result.ok) {
  console.log(result.docs);
}

await mongo.close();

Using await using for automatic cleanup

import { createMongoClient } from "@probitas/client-mongodb";

await using mongo = await createMongoClient({
  url: "mongodb://localhost:27017",
  database: "testdb",
});

const result = await mongo.collection("users").find({});
if (result.ok) {
  console.log(result.docs);
}
// Client automatically closed when scope exits

Types

type

#Document

type Document<T = any> = Record<string, T>

MongoDB document type

type

#Filter

type Filter = Record<string, any>

MongoDB filter type (simplified for compatibility with mongodb driver) Allows query operators like $gte, $lt, $in, etc.

type

#MongoCountResult

type MongoCountResult = MongoCountResultSuccess | MongoCountResultError | MongoCountResultFailure

Count result.

type

#MongoDeleteResult

type MongoDeleteResult = MongoDeleteResultSuccess | MongoDeleteResultError | MongoDeleteResultFailure

Delete result.

type

#MongoFailureError

type MongoFailureError = MongoConnectionError | AbortError | TimeoutError

Error types that indicate the operation was not processed. These are errors that occur before the operation reaches the MongoDB server.

type

#MongoFindOneResult

type MongoFindOneResult<T = Document> = MongoFindOneResultSuccess<T>
  | MongoFindOneResultError<T>
  | MongoFindOneResultFailure<T>

FindOne result.

type

#MongoFindResult

type MongoFindResult<T = Document> = MongoFindResultSuccess<T> | MongoFindResultError<T> | MongoFindResultFailure<T>

Query result (find, aggregate).

type

#MongoInsertManyResult

type MongoInsertManyResult = MongoInsertManyResultSuccess
  | MongoInsertManyResultError
  | MongoInsertManyResultFailure

Insert many result.

type

#MongoInsertOneResult

type MongoInsertOneResult = MongoInsertOneResultSuccess
  | MongoInsertOneResultError
  | MongoInsertOneResultFailure

Insert one result.

type

#MongoOperationError

type MongoOperationError = MongoQueryError
  | MongoDuplicateKeyError
  | MongoValidationError
  | MongoWriteError
  | MongoNotFoundError
  | MongoError

Error types that indicate a MongoDB operation error. These are errors where the operation reached the server but failed.

type

#MongoResult

type MongoResult<T = any> = MongoFindResult<T>
  | MongoInsertOneResult
  | MongoInsertManyResult
  | MongoUpdateResult
  | MongoDeleteResult
  | MongoFindOneResult<T>
  | MongoCountResult

Union of all MongoDB result types.

type

#MongoUpdateResult

type MongoUpdateResult = MongoUpdateResultSuccess | MongoUpdateResultError | MongoUpdateResultFailure

Update result.

type

#UpdateFilter

type UpdateFilter = Record<string, any>

MongoDB update filter type (simplified for compatibility with mongodb driver) Allows update operators like $set, $inc, $unset, etc.

Search Documentation