ag-grid-mongo-query-builder
Advanced tools
Comparing version 0.1.0 to 0.1.1
{ | ||
"name": "ag-grid-mongo-query-builder", | ||
"version": "0.1.0", | ||
"version": "0.1.1", | ||
"description": "Utility to generate Mongo DB aggregation pipeline queries starting from AgGrid server side params", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
const mongoose = require('mongoose'); | ||
export const buildQuery = function (reqBody) { | ||
let { | ||
groupKeys = [], // holds the ID of the expanded node and the ID's of all its parent/grandparent node | ||
rowGroupCols = [], | ||
sortModel = [], //contains the sorting state for every sorted column in the ag-Grid instance | ||
filterModel = {}, //values being filtered in UI | ||
valueCols = [] , // required for aggregation | ||
pivotCols= [], | ||
pivotMode , | ||
startRow, | ||
@@ -12,6 +17,6 @@ endRow | ||
console.log('params in API :', { groupKeys, sortModel, filterModel, valueCols, startRow, endRow }); | ||
console.log('params in API :', { groupKeys, rowGroupCols, pivotCols, pivotMode, sortModel, filterModel, valueCols, startRow, endRow }); | ||
const isFiltering = Object.keys(filterModel).length > 0; | ||
const isGrouping = groupKeys.length > 0; | ||
const isGrouping = groupKeys.length > 0 || 1; | ||
const isSorting = sortModel.length > 0; | ||
@@ -21,3 +26,3 @@ const limit = endRow - startRow; | ||
const filterQuery = isFiltering ? buildFilterQuery(filterModel) : []; | ||
const groupQuery = isGrouping ? buildGroupingQuery(groupKeys) : []; | ||
const groupQuery = isGrouping ? buildGroupingQuery(groupKeys, rowGroupCols) : []; | ||
const sortQuery = isSorting ? buildSortQuery(sortModel) : null; | ||
@@ -27,2 +32,4 @@ const skipQuery = {'$skip': startRow}; | ||
console.log('filter query :', JSON.stringify(filterQuery)); | ||
console.log('Group query:',JSON.stringify(groupQuery)); | ||
const aggregationPipeline = [ | ||
@@ -155,4 +162,3 @@ ...filterQuery, | ||
*/ | ||
console.log('inside set filter'); | ||
console.log('set filter for : ', filterModel , ' key:', key); | ||
console.log('inside set filter for : ', filterModel , ' key:', key); | ||
@@ -176,18 +182,32 @@ if(filterModel.values.length >0) | ||
function buildGroupingQuery(groupKeys){ | ||
return groupKeys.map(groupKey => { | ||
return { | ||
'$match': { //finds the document that corresponds to the expanded group | ||
'_id': new mongoose.Types.ObjectId(groupKey) | ||
} | ||
}, { | ||
'$unwind': { | ||
'path': '$' + groupKeys.rowGroupCols[0] + '' // replace with property to be displayed in ag-grid row -- it's part of schema | ||
} | ||
}, { | ||
'$replaceRoot': { | ||
'newRoot': '$' + groupKeys.rowGroupCols[0] + '' | ||
} | ||
function buildGroupingQuery(groupKeys , rowGroupCols){ | ||
let query=[]; | ||
if(groupKeys.length ===0 && rowGroupCols.length >0 ) | ||
{ | ||
return [{ $match:{ } }] | ||
} | ||
if( groupKeys.length === rowGroupCols.length){ | ||
// same length : no need to add group by clause in this case | ||
for (let i=0;i<rowGroupCols.length;i++){ | ||
query.push({ [ rowGroupCols[i].id ] : groupKeys[i] }); | ||
} | ||
}) | ||
let z=[{"$match": {"$and" : query}}]; | ||
console.log('Grouping query:', JSON.stringify(z)); | ||
return z; | ||
} | ||
if(groupKeys.length < rowGroupCols.length){ | ||
let i=0; | ||
for(;i<groupKeys.length;i++){ | ||
query.push({ [rowGroupCols[i].id ] : groupKeys[i]}); | ||
} | ||
let z=[{"$match": {"$and" : query}}]; | ||
console.log('Groupung Query:', z); | ||
return z; | ||
} | ||
console.log('returning blank group query: missing required params.'); | ||
return {}; | ||
} | ||
@@ -203,8 +223,2 @@ | ||
return {'$sort': sortQuery} | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
8775
187