odatafy-mongodb
Version:
convert oData requests through odatafy to MongoDB queries
41 lines (40 loc) • 1.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateProjectStage = exports.generateProjectFromSelectExpr = void 0;
var odatafy_parser_1 = require("odatafy-parser");
/**
* Get a MongoDB project stage based on oData select parameter
* @param expr value of select url parameter
* @returns MongoDB aggregation pipline project stage
*/
function generateProjectFromSelectExpr(expr) {
var select = odatafy_parser_1.selectParser.parse(expr);
return generateProjectStage(select);
}
exports.generateProjectFromSelectExpr = generateProjectFromSelectExpr;
/**
* Get MongoDB project stage based on a parsed select expression
* @param select ast parsed select from a select expression
* @returns MongoDB aggregation pipline project stage
*/
function generateProjectStage(selectNode) {
var projection = {};
//iterate through selectnode
selectNode.value.forEach(function (selectPathNode) {
var extractedPaths = [];
if (selectPathNode.nodeType == odatafy_parser_1.NodeTypes.SelectPathNode) {
selectPathNode.value.forEach(function (selectItemNode) {
//only include identifier nodes
if (selectItemNode.nodeType == odatafy_parser_1.NodeTypes.SelectIdentifierNode) {
extractedPaths.push(selectItemNode.value);
}
});
var path = extractedPaths.join('.');
projection[path] = 1;
}
});
return {
'$project': projection
};
}
exports.generateProjectStage = generateProjectStage;