You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.4 KiB
51 lines
1.4 KiB
import { Collection } from '../collection';
|
|
import type { Db } from '../db';
|
|
import type { Server } from '../sdam/server';
|
|
import type { ClientSession } from '../sessions';
|
|
import type { Callback } from '../utils';
|
|
import { AbstractOperation, OperationOptions } from './operation';
|
|
|
|
export interface CollectionsOptions extends OperationOptions {
|
|
nameOnly?: boolean;
|
|
}
|
|
|
|
/** @internal */
|
|
export class CollectionsOperation extends AbstractOperation<Collection[]> {
|
|
override options: CollectionsOptions;
|
|
db: Db;
|
|
|
|
constructor(db: Db, options: CollectionsOptions) {
|
|
super(options);
|
|
this.options = options;
|
|
this.db = db;
|
|
}
|
|
|
|
override execute(
|
|
server: Server,
|
|
session: ClientSession | undefined,
|
|
callback: Callback<Collection[]>
|
|
): void {
|
|
// Let's get the collection names
|
|
this.db
|
|
.listCollections(
|
|
{},
|
|
{ ...this.options, nameOnly: true, readPreference: this.readPreference, session }
|
|
)
|
|
.toArray()
|
|
.then(
|
|
documents => {
|
|
const collections = [];
|
|
for (const { name } of documents) {
|
|
if (!name.includes('$')) {
|
|
// Filter collections removing any illegal ones
|
|
collections.push(new Collection(this.db, name, this.db.s.options));
|
|
}
|
|
}
|
|
// Return the collection objects
|
|
callback(undefined, collections);
|
|
},
|
|
error => callback(error)
|
|
);
|
|
}
|
|
}
|