@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" });
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
Package Description
@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 CommonOptions

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?: CommonOptions): Promise<MongoFindOneResult<T>>
Parameters
insertOne(doc: Omit<T, "_id">, options?: CommonOptions): Promise<MongoInsertOneResult>
Parameters
insertMany(docs: Omit<T, "_id">[], options?: CommonOptions): 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?: CommonOptions): Promise<MongoDeleteResult>
Parameters
deleteMany(filter: Filter, options?: CommonOptions): Promise<MongoDeleteResult>
Parameters
aggregate<R = T>(pipeline: Document[], options?: CommonOptions): Promise<MongoFindResult<R>>
Parameters
countDocuments(filter?: Filter, options?: CommonOptions): 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

#MongoCountResult

interface MongoCountResult

Count result

NameDescription
type
ok
count
duration
Properties
  • readonlytype"mongo:count"
  • readonlyokboolean
  • readonlycountnumber
  • readonlydurationnumber
interface

#MongoDeleteResult

interface MongoDeleteResult

Delete result

NameDescription
type
ok
deletedCount
duration
Properties
  • readonlytype"mongo:delete"
  • readonlyokboolean
  • readonlydeletedCountnumber
  • readonlydurationnumber
interface

#MongoDocs

interface MongoDocs<T> extends ReadonlyArray<T>

Document array with first/last methods

NameDescription
first()
firstOrThrow()
last()
lastOrThrow()
Methods
first(): T | undefined
firstOrThrow(): T
last(): T | undefined
lastOrThrow(): T
interface

#MongoErrorOptions

interface MongoErrorOptions extends ErrorOptions

Options for MongoDB errors.

NameDescription
code
Properties
  • readonlycode?number
interface

#MongoFindOneResult

interface MongoFindOneResult<T = Document>

FindOne result

NameDescription
type
ok
doc
duration
Properties
  • readonlytype"mongo:find-one"
  • readonlyokboolean
  • readonlydocT | undefined
  • readonlydurationnumber
interface

#MongoFindOptions

interface MongoFindOptions extends CommonOptions

MongoDB find options

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

#MongoFindResult

interface MongoFindResult<T = Document>

Query result (find, aggregate)

NameDescription
type
ok
docs
duration
Properties
  • readonlytype"mongo:find"
  • readonlyokboolean
  • readonlydocsMongoDocs<T>
  • readonlydurationnumber
interface

#MongoInsertManyResult

interface MongoInsertManyResult

Insert many result

NameDescription
type
ok
insertedIds
insertedCount
duration
Properties
  • readonlytype"mongo:insert"
  • readonlyokboolean
  • readonlyinsertedIdsreadonly string[]
  • readonlyinsertedCountnumber
  • readonlydurationnumber
interface

#MongoInsertOneResult

interface MongoInsertOneResult

Insert one result

NameDescription
type
ok
insertedId
duration
Properties
  • readonlytype"mongo:insert"
  • readonlyokboolean
  • readonlyinsertedIdstring
  • readonlydurationnumber
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 CommonOptions

MongoDB update options

NameDescription
upsert
Properties
  • readonlyupsert?boolean
interface

#MongoUpdateResult

interface MongoUpdateResult

Update result

NameDescription
type
ok
matchedCount
modifiedCount
upsertedId
duration
Properties
  • readonlytype"mongo:update"
  • readonlyokboolean
  • readonlymatchedCountnumber
  • readonlymodifiedCountnumber
  • readonlyupsertedId?string
  • readonlydurationnumber

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

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
function

#createMongoDocs

function createMongoDocs<T>(items: T[]): MongoDocs<T>

Create a MongoDocs array from a regular array.

Parameters
  • itemsT[]

Type Aliases

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

#MongoResult

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

Union of all MongoDB result types.

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