@steedos/odata-v4-mongodb
Version:
Service OData requests from a MongoDB data store
41 lines (39 loc) • 1.76 kB
text/typescript
/*
* @Author: baozhoutao@steedos.com
* @Date: 2022-07-10 15:44:34
* @LastEditors: baozhoutao@steedos.com
* @LastEditTime: 2022-07-10 17:09:22
* @Description:
*/
import { Visitor } from "./visitor"
import { filter, query } from "@steedos/odata-v4-parser"
/**
* Creates MongoDB collection, query, projection, sort, skip and limit from an OData URI string
* @param {string} queryString - An OData query string
* @return {Visitor} Visitor instance object with collection, query, projection, sort, skip and limit
* @example
* const query = createQuery("$filter=Size eq 4&$orderby=Orders&$skip=10&$top=5");
* collections[query.collection].find(query.query).project(query.projection).sort(query.sort).skip(query.skip).limit(query.limit).toArray(function(err, data){ ... });
*/
export function createQuery(odataQuery:string);
export function createQuery(odataQuery:any);
export function createQuery(odataQuery:string | any){
let ast:any = <any>(typeof odataQuery == "string" ? query(<string>odataQuery) : odataQuery);
return new Visitor().Visit(ast);
}
/**
* Creates a MongoDB query object from an OData filter expression string
* @param {string} odataFilter - A filter expression in OData $filter format
* @return {Object} MongoDB query object
* @example
* const filter = createFilter("Size eq 4 and Age gt 18");
* collection.find(filter, function(err, data){ ... });
*/
export function createFilter(odataFilter:string);
export function createFilter(odataFilter:any);
export function createFilter(odataFilter:string | any):Object{
let context = { query: {} };
let ast:any = <any>(typeof odataFilter == "string" ? filter(<string>odataFilter) : odataFilter);
new Visitor().Visit(ast, context);
return context.query;
}