You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
4.8 KiB
TypeScript
169 lines
4.8 KiB
TypeScript
import { type Document, resolveBSONOptions } from './bson';
|
|
import type { Db } from './db';
|
|
import type { CommandOperationOptions } from './operations/command';
|
|
import { executeOperation } from './operations/execute_operation';
|
|
import {
|
|
ListDatabasesOperation,
|
|
type ListDatabasesOptions,
|
|
type ListDatabasesResult
|
|
} from './operations/list_databases';
|
|
import { RemoveUserOperation, type RemoveUserOptions } from './operations/remove_user';
|
|
import { RunAdminCommandOperation, type RunCommandOptions } from './operations/run_command';
|
|
import {
|
|
ValidateCollectionOperation,
|
|
type ValidateCollectionOptions
|
|
} from './operations/validate_collection';
|
|
|
|
/** @internal */
|
|
export interface AdminPrivate {
|
|
db: Db;
|
|
}
|
|
|
|
/**
|
|
* The **Admin** class is an internal class that allows convenient access to
|
|
* the admin functionality and commands for MongoDB.
|
|
*
|
|
* **ADMIN Cannot directly be instantiated**
|
|
* @public
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* import { MongoClient } from 'mongodb';
|
|
*
|
|
* const client = new MongoClient('mongodb://localhost:27017');
|
|
* const admin = client.db().admin();
|
|
* const dbInfo = await admin.listDatabases();
|
|
* for (const db of dbInfo.databases) {
|
|
* console.log(db.name);
|
|
* }
|
|
* ```
|
|
*/
|
|
export class Admin {
|
|
/** @internal */
|
|
s: AdminPrivate;
|
|
|
|
/**
|
|
* Create a new Admin instance
|
|
* @internal
|
|
*/
|
|
constructor(db: Db) {
|
|
this.s = { db };
|
|
}
|
|
|
|
/**
|
|
* Execute a command
|
|
*
|
|
* The driver will ensure the following fields are attached to the command sent to the server:
|
|
* - `lsid` - sourced from an implicit session or options.session
|
|
* - `$readPreference` - defaults to primary or can be configured by options.readPreference
|
|
* - `$db` - sourced from the name of this database
|
|
*
|
|
* If the client has a serverApi setting:
|
|
* - `apiVersion`
|
|
* - `apiStrict`
|
|
* - `apiDeprecationErrors`
|
|
*
|
|
* When in a transaction:
|
|
* - `readConcern` - sourced from readConcern set on the TransactionOptions
|
|
* - `writeConcern` - sourced from writeConcern set on the TransactionOptions
|
|
*
|
|
* Attaching any of the above fields to the command will have no effect as the driver will overwrite the value.
|
|
*
|
|
* @param command - The command to execute
|
|
* @param options - Optional settings for the command
|
|
*/
|
|
async command(command: Document, options?: RunCommandOptions): Promise<Document> {
|
|
return executeOperation(
|
|
this.s.db.client,
|
|
new RunAdminCommandOperation(command, {
|
|
...resolveBSONOptions(options),
|
|
session: options?.session,
|
|
readPreference: options?.readPreference
|
|
})
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Retrieve the server build information
|
|
*
|
|
* @param options - Optional settings for the command
|
|
*/
|
|
async buildInfo(options?: CommandOperationOptions): Promise<Document> {
|
|
return this.command({ buildinfo: 1 }, options);
|
|
}
|
|
|
|
/**
|
|
* Retrieve the server build information
|
|
*
|
|
* @param options - Optional settings for the command
|
|
*/
|
|
async serverInfo(options?: CommandOperationOptions): Promise<Document> {
|
|
return this.command({ buildinfo: 1 }, options);
|
|
}
|
|
|
|
/**
|
|
* Retrieve this db's server status.
|
|
*
|
|
* @param options - Optional settings for the command
|
|
*/
|
|
async serverStatus(options?: CommandOperationOptions): Promise<Document> {
|
|
return this.command({ serverStatus: 1 }, options);
|
|
}
|
|
|
|
/**
|
|
* Ping the MongoDB server and retrieve results
|
|
*
|
|
* @param options - Optional settings for the command
|
|
*/
|
|
async ping(options?: CommandOperationOptions): Promise<Document> {
|
|
return this.command({ ping: 1 }, options);
|
|
}
|
|
|
|
/**
|
|
* Remove a user from a database
|
|
*
|
|
* @param username - The username to remove
|
|
* @param options - Optional settings for the command
|
|
*/
|
|
async removeUser(username: string, options?: RemoveUserOptions): Promise<boolean> {
|
|
return executeOperation(
|
|
this.s.db.client,
|
|
new RemoveUserOperation(this.s.db, username, { dbName: 'admin', ...options })
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Validate an existing collection
|
|
*
|
|
* @param collectionName - The name of the collection to validate.
|
|
* @param options - Optional settings for the command
|
|
*/
|
|
async validateCollection(
|
|
collectionName: string,
|
|
options: ValidateCollectionOptions = {}
|
|
): Promise<Document> {
|
|
return executeOperation(
|
|
this.s.db.client,
|
|
new ValidateCollectionOperation(this, collectionName, options)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* List the available databases
|
|
*
|
|
* @param options - Optional settings for the command
|
|
*/
|
|
async listDatabases(options?: ListDatabasesOptions): Promise<ListDatabasesResult> {
|
|
return executeOperation(this.s.db.client, new ListDatabasesOperation(this.s.db, options));
|
|
}
|
|
|
|
/**
|
|
* Get ReplicaSet status
|
|
*
|
|
* @param options - Optional settings for the command
|
|
*/
|
|
async replSetGetStatus(options?: CommandOperationOptions): Promise<Document> {
|
|
return this.command({ replSetGetStatus: 1 }, options);
|
|
}
|
|
}
|