import { Observable } from 'rxjs';
import * as mongodb from 'mongodb';
import { IQueryWhere, IQuery, IQueryObject } from 'blow-query';
import { Adapter } from './Adapter';
import { IPersistedAdapter, IModelMetadata } from '../interfaces';
export declare class MongoDBAdapter extends Adapter implements IPersistedAdapter {
    protected _db: mongodb.Db;
    idPropertyName: string;
    idPropertyType: any;
    protected _connect(): Observable<MongoDBAdapter>;
    protected _collection(metadata: IModelMetadata): mongodb.Collection;
    protected _prepareQuery(query: IQuery | IQueryObject): IQueryObject;
    count(metadata: IModelMetadata, where?: IQueryWhere): Observable<number>;
    create(metadata: IModelMetadata, data: any): Observable<any>;
    destroy(metadata: IModelMetadata, where?: IQueryWhere): Observable<number>;
    destroyById(metadata: IModelMetadata, id: any): Observable<boolean>;
    exists(metadata: IModelMetadata, id: any): Observable<boolean>;
    find(metadata: IModelMetadata, query?: IQuery | IQueryObject): Observable<any>;
    findOne(metadata: IModelMetadata, query?: IQuery | IQueryObject): Observable<any>;
    findById(metadata: IModelMetadata, id: any): Observable<any>;
    findOrCreate(metadata: IModelMetadata, where: IQueryWhere, data: any): Observable<any>;
    update(metadata: IModelMetadata, where: IQueryWhere, data: any): Observable<number>;
    updateOrCreate(metadata: IModelMetadata, data: any): Observable<any>;
    static toDB(metadata: IModelMetadata, data: any): any;
    static fromDB(metadata: IModelMetadata, data: any): any;
    static buildWhereWithId(metadata: IModelMetadata, id: any): {
        [key: string]: any;
    };
    static buildWhere(metadata: IModelMetadata, where: {
        [key: string]: any;
    }): {
        [key: string]: any;
    };
    static buildId(id: any): mongodb.ObjectID;
    static getConnectionUrl(options: any): string;
}
