import { IQuery, QueryCondition, SubKeySet } from "./IQuery";
import { ModelMetadata } from "./ModelMetadata";
import { AbstractModel } from "./AbstractModel";
export declare abstract class AbstractQuery<T> implements IQuery<T> {
    abstract deleteMany(queries: QueryCondition<T>[]): Promise<number>;
    abstract deleteOne(modelInstance: Partial<T>): Promise<T>;
    abstract getMany(queries?: QueryCondition<T>[], options?: {
        order?: {
            [key in SubKeySet<T>]?: "desc" | "asc";
        };
        projection?: SubKeySet<T>[];
        limit?: number;
        page?: number;
    }): Promise<T[]>;
    abstract getOne(queries?: QueryCondition<T>[], options?: {
        order?: {
            [key in SubKeySet<T>]?: "desc" | "asc";
        };
        projection?: SubKeySet<T>[];
    }): Promise<T | undefined>;
    abstract rawQuery(query: any): Promise<any>;
    abstract saveMany(modelInstances: Partial<T>[]): Promise<T[]>;
    abstract saveOne(modelInstance: Partial<T>): Promise<T>;
    abstract updateMany(queries: QueryCondition<T>[], update: Partial<T>): Promise<number>;
    abstract updateOne(modelInstance: Partial<T>): Promise<T>;
    protected abstract getQueryObjectFromQueryConditions(queries: QueryCondition<T>[]): any;
    protected readonly currentModel: new (...args: any[]) => AbstractModel;
    protected readonly currentMetadata: ModelMetadata;
    protected constructor(model: new (...args: any[]) => AbstractModel, metadata: ModelMetadata);
    protected getProjectionFields(projection: SubKeySet<T>[]): string[];
    protected convertToLogicObjects(dataObjects: any[], projection?: SubKeySet<T>[]): Partial<T>[];
    protected convertToDataObjects(modelInstances: Partial<T>[]): any;
}
//# sourceMappingURL=AbstractQuery.d.ts.map