dce-mango
Version:
Harvard DCE's Non-relational DB Wrapper.
127 lines (126 loc) • 4.6 kB
TypeScript
import Query from './Query';
import FilterOpts from './FilterOpts';
import MutateResult from './MutateResult';
import Id from './Id';
import PaginatedResponse from './PaginatedResponse';
/**
* Interface describing a basic collection.
* @author Benedikt Arnarsson
*/
interface BasicCollectionInterface<DocumentType extends {
[k: string]: any;
}> {
/**
* Run a query
* @author Gabe Abrams
* @param query the query to run
* @param [includeMongoTimestamp] if true, include the timestamp
* in the mongo objects
* @returns documents
*/
find(query: Query, includeMongoTimestamp?: boolean): Promise<DocumentType[]>;
/**
* Run a query with pagination
* @author Yuen Ler Chow
* @param query the query to run
* @param perPage the number of items per page
* @param pageNumber the page number to return, 1-indexed
* @param [includeMongoTimestamp] if true, include the timestamp
* in the mongo objects
* @returns documents
*/
findPaged(opts: {
query: Query;
perPage?: number;
pageNumber?: number;
includeMongoTimestamp?: boolean;
}): Promise<PaginatedResponse<DocumentType>>;
/**
* Write a record to the collection
* @author Gabe Abrams
* @param obj the object to insert
*/
insert(obj: DocumentType): Promise<void>;
/**
* Delete the first document that matches the query in the collection
* @author Gabe Abrams
* @param query the query that will match the item
*/
delete(query: Query): Promise<void>;
/**
* Delete all documents that match the query in the collection
* @author Gabe Abrams
* @param query the query that will match the items to delete
*/
deleteAll(query: Query): Promise<void>;
/**
* Find elements then only return the values for one specific property from
* each item
* @author Gabe Abrams
* @param query the query to run
* @param prop the name of the property to extract
* @param [excludeFalsy] if true, exclude falsy values
* @returns array of values of the property
*/
findAndExtractProp(query: Query, prop: string, excludeFalsy?: boolean): Promise<any[]>;
/**
* Count the number of matching elements
* @author Gabe Abrams
* @param query the query to run
* @returns number of documents that match
*/
count(query: Query): Promise<number>;
/**
* List distinct values for a property in a collection
* @author Gabe Abrams
* @param prop the property to list distinct values for
* @param [query] the query to run. If excluded, all distinct
* values are included
* @returns array of distinct values
*/
distinct(prop: string, query?: Query): Promise<any[]>;
/**
* Increment value of an integer for an object
* @author Gabe Abrams
* @param id id of the object to increment
* @param prop property to increment
*/
increment(id: Id, prop: string): Promise<MutateResult>;
/**
* Increment value of an integer for an object, found by a query
* @author Gabe Abrams
* @param query query to find the object to increment
* @param prop property to increment
*/
incrementByQuery(query: Query, prop: string): Promise<MutateResult>;
/**
* Add/update object values in an entry in the collection. The entry must
* already exist
* @author Gabe Abrams
* @param query query to apply to find the object to update
* @param updates map of updates: { prop => value } where prop is
* the potentially nested name of the property
* (e.g. "age" or "profile.age")
*/
updatePropValues(query: Query, updates: Query): Promise<MutateResult>;
/**
* Add an object to an array in an object
* @author Gabe Abrams
* @param id the id of the object to modify
* @param arrayProp the name of the array to insert into
* @param obj the object to insert into the array
*/
push(id: Id, arrayProp: string, obj: any): Promise<MutateResult>;
/**
* Filter an array in an entry
* @author Gabe Abrams
* @param opts object containing all args
* @param opts.id the id of the object to modify
* @param opts.arrayProp the name of the array to filter
* @param opts.compareProp the name of the array entry prop to compare
* @param opts.compareValue the value of the array entry prop to filter
* out
*/
filterOut(opts: FilterOpts): Promise<MutateResult>;
}
export default BasicCollectionInterface;