@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" });
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
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 MongoOptionsMongoDB 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?: MongoOptions): Promise<MongoFindOneResult<T>>Parameters
filterFilteroptions?MongoOptions
insertOne(
doc: Omit<T, "_id">,
options?: MongoOptions,
): Promise<MongoInsertOneResult>Parameters
docOmit<T, "_id">options?MongoOptions
insertMany(
docs: Omit<T, "_id">[],
options?: MongoOptions,
): Promise<MongoInsertManyResult>Parameters
docsOmit<T, "_id">[]options?MongoOptions
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?: MongoOptions): Promise<MongoDeleteResult>Parameters
filterFilteroptions?MongoOptions
deleteMany(filter: Filter, options?: MongoOptions): Promise<MongoDeleteResult>Parameters
filterFilteroptions?MongoOptions
aggregate<R = T>(
pipeline: Document[],
options?: MongoOptions,
): Promise<MongoFindResult<R>>Parameters
pipelineDocument[]options?MongoOptions
countDocuments(
filter?: Filter,
options?: MongoOptions,
): Promise<MongoCountResult>Parameters
filter?Filteroptions?MongoOptions
#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.
#MongoCountResultError
interface MongoCountResultError extends MongoCountResultBaseCount result with MongoDB error.
Properties
- readonly
processedtrue - readonly
okfalse - readonly
countnull
#MongoCountResultFailure
interface MongoCountResultFailure extends MongoCountResultBaseCount result with connection failure.
Properties
- readonly
processedfalse - readonly
okfalse - readonly
countnull
#MongoCountResultSuccess
interface MongoCountResultSuccess extends MongoCountResultBaseSuccessful count result.
Properties
- readonly
processedtrue - readonly
oktrue - readonly
errornull - readonly
countnumber
#MongoDeleteResultError
interface MongoDeleteResultError extends MongoDeleteResultBaseDelete result with MongoDB error.
| Name | Description |
|---|---|
processed | — |
ok | — |
error | — |
deletedCount | — |
Properties
- readonly
processedtrue - readonly
okfalse - readonly
deletedCountnull
#MongoDeleteResultFailure
interface MongoDeleteResultFailure extends MongoDeleteResultBaseDelete result with connection failure.
| Name | Description |
|---|---|
processed | — |
ok | — |
error | — |
deletedCount | — |
Properties
- readonly
processedfalse - readonly
okfalse - readonly
deletedCountnull
#MongoDeleteResultSuccess
interface MongoDeleteResultSuccess extends MongoDeleteResultBaseSuccessful delete result.
| Name | Description |
|---|---|
processed | — |
ok | — |
error | — |
deletedCount | — |
Properties
- readonly
processedtrue - readonly
oktrue - readonly
errornull - readonly
deletedCountnumber
#MongoErrorOptions
interface MongoErrorOptions extends ErrorOptionsOptions for MongoDB errors.
| Name | Description |
|---|---|
code | — |
Properties
- readonly
code?number
#MongoFindOneResultError
interface MongoFindOneResultError<T = Document> extends MongoFindOneResultBase<T>FindOne result with MongoDB error.
Properties
- readonly
processedtrue - readonly
okfalse - readonly
docnull
#MongoFindOneResultFailure
interface MongoFindOneResultFailure<T = Document> extends MongoFindOneResultBase<T>FindOne result with connection failure.
Properties
- readonly
processedfalse - readonly
okfalse - readonly
docnull
#MongoFindOneResultSuccess
interface MongoFindOneResultSuccess<T = Document> extends MongoFindOneResultBase<T>Successful findOne result.
Properties
- readonly
processedtrue - readonly
oktrue - readonly
errornull - readonly
docT | null
#MongoFindOptions
interface MongoFindOptions extends MongoOptionsMongoDB 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>
#MongoFindResultError
interface MongoFindResultError<T = Document> extends MongoFindResultBase<T>Find result with MongoDB error.
Properties
- readonly
processedtrue - readonly
okfalse - readonly
docsreadonly T[]
#MongoFindResultFailure
interface MongoFindResultFailure<T = Document> extends MongoFindResultBase<T>Find result with connection failure.
Properties
- readonly
processedfalse - readonly
okfalse - readonly
docsnull
#MongoFindResultSuccess
interface MongoFindResultSuccess<T = Document> extends MongoFindResultBase<T>Successful find result.
Properties
- readonly
processedtrue - readonly
oktrue - readonly
errornull - readonly
docsreadonly T[]
#MongoInsertManyResultError
interface MongoInsertManyResultError extends MongoInsertManyResultBaseInsertMany result with MongoDB error.
| Name | Description |
|---|---|
processed | — |
ok | — |
error | — |
insertedIds | — |
insertedCount | — |
Properties
- readonly
processedtrue - readonly
okfalse - readonly
insertedIdsnull - readonly
insertedCountnull
#MongoInsertManyResultFailure
interface MongoInsertManyResultFailure extends MongoInsertManyResultBaseInsertMany result with connection failure.
| Name | Description |
|---|---|
processed | — |
ok | — |
error | — |
insertedIds | — |
insertedCount | — |
Properties
- readonly
processedfalse - readonly
okfalse - readonly
insertedIdsnull - readonly
insertedCountnull
#MongoInsertManyResultSuccess
interface MongoInsertManyResultSuccess extends MongoInsertManyResultBaseSuccessful insertMany result.
| Name | Description |
|---|---|
processed | — |
ok | — |
error | — |
insertedIds | — |
insertedCount | — |
Properties
- readonly
processedtrue - readonly
oktrue - readonly
errornull - readonly
insertedIdsreadonly string[] - readonly
insertedCountnumber
#MongoInsertOneResultError
interface MongoInsertOneResultError extends MongoInsertOneResultBaseInsertOne result with MongoDB error.
| Name | Description |
|---|---|
processed | — |
ok | — |
error | — |
insertedId | — |
Properties
- readonly
processedtrue - readonly
okfalse - readonly
insertedIdnull
#MongoInsertOneResultFailure
interface MongoInsertOneResultFailure extends MongoInsertOneResultBaseInsertOne result with connection failure.
| Name | Description |
|---|---|
processed | — |
ok | — |
error | — |
insertedId | — |
Properties
- readonly
processedfalse - readonly
okfalse - readonly
insertedIdnull
#MongoInsertOneResultSuccess
interface MongoInsertOneResultSuccess extends MongoInsertOneResultBaseSuccessful insertOne result.
| Name | Description |
|---|---|
processed | — |
ok | — |
error | — |
insertedId | — |
Properties
- readonly
processedtrue - readonly
oktrue - readonly
errornull - readonly
insertedIdstring
#MongoOptions
interface MongoOptions extends CommonOptionsCommon options with throwOnError support.
| Name | Description |
|---|---|
throwOnError | If true, throws errors instead of returning them in the result. |
Properties
- readonly
throwOnError?booleanIf true, throws errors instead of returning them in the result. If false (default), errors are returned in the result object.
#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 MongoOptionsMongoDB update options
| Name | Description |
|---|---|
upsert | — |
Properties
- readonly
upsert?boolean
#MongoUpdateResultError
interface MongoUpdateResultError extends MongoUpdateResultBaseUpdate result with MongoDB error.
| Name | Description |
|---|---|
processed | — |
ok | — |
error | — |
matchedCount | — |
modifiedCount | — |
upsertedId | — |
Properties
- readonly
processedtrue - readonly
okfalse - readonly
matchedCountnull - readonly
modifiedCountnull - readonly
upsertedIdnull
#MongoUpdateResultFailure
interface MongoUpdateResultFailure extends MongoUpdateResultBaseUpdate result with connection failure.
| Name | Description |
|---|---|
processed | — |
ok | — |
error | — |
matchedCount | — |
modifiedCount | — |
upsertedId | — |
Properties
- readonly
processedfalse - readonly
okfalse - readonly
matchedCountnull - readonly
modifiedCountnull - readonly
upsertedIdnull
#MongoUpdateResultSuccess
interface MongoUpdateResultSuccess extends MongoUpdateResultBaseSuccessful update result.
| Name | Description |
|---|---|
processed | — |
ok | — |
error | — |
matchedCount | — |
modifiedCount | — |
upsertedId | — |
Properties
- readonly
processedtrue - readonly
oktrue - readonly
errornull - readonly
matchedCountnumber - readonly
modifiedCountnumber - readonly
upsertedIdstring | null
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
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
#Filter
type Filter = Record<string, any>MongoDB filter type (simplified for compatibility with mongodb driver) Allows query operators like $gte, $lt, $in, etc.
#MongoCountResult
type MongoCountResult = MongoCountResultSuccess | MongoCountResultError | MongoCountResultFailureCount result.
#MongoDeleteResult
type MongoDeleteResult = MongoDeleteResultSuccess | MongoDeleteResultError | MongoDeleteResultFailureDelete result.
#MongoFailureError
type MongoFailureError = MongoConnectionError | AbortError | TimeoutErrorError types that indicate the operation was not processed. These are errors that occur before the operation reaches the MongoDB server.
#MongoFindOneResult
type MongoFindOneResult<T = Document> = MongoFindOneResultSuccess<T>
| MongoFindOneResultError<T>
| MongoFindOneResultFailure<T>FindOne result.
#MongoFindResult
type MongoFindResult<T = Document> = MongoFindResultSuccess<T> | MongoFindResultError<T> | MongoFindResultFailure<T>Query result (find, aggregate).
#MongoInsertManyResult
type MongoInsertManyResult = MongoInsertManyResultSuccess
| MongoInsertManyResultError
| MongoInsertManyResultFailureInsert many result.
#MongoInsertOneResult
type MongoInsertOneResult = MongoInsertOneResultSuccess
| MongoInsertOneResultError
| MongoInsertOneResultFailureInsert one result.
#MongoOperationError
type MongoOperationError = MongoQueryError
| MongoDuplicateKeyError
| MongoValidationError
| MongoWriteError
| MongoNotFoundError
| MongoErrorError types that indicate a MongoDB operation error. These are errors where the operation reached the server but failed.
#MongoResult
type MongoResult<T = any> = MongoFindResult<T>
| MongoInsertOneResult
| MongoInsertManyResult
| MongoUpdateResult
| MongoDeleteResult
| MongoFindOneResult<T>
| MongoCountResultUnion of all MongoDB result types.
#MongoUpdateResult
type MongoUpdateResult = MongoUpdateResultSuccess | MongoUpdateResultError | MongoUpdateResultFailureUpdate result.
#UpdateFilter
type UpdateFilter = Record<string, any>MongoDB update filter type (simplified for compatibility with mongodb driver) Allows update operators like $set, $inc, $unset, etc.
