ag-grid-mongo-query-builder
Advanced tools
Comparing version 0.3.3 to 0.3.4
{ | ||
"name": "ag-grid-mongo-query-builder", | ||
"version": "0.3.3", | ||
"version": "0.3.4", | ||
"description": "Utility to generate Mongo DB aggregation pipeline queries starting from AgGrid server side params", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -39,8 +39,14 @@ //const mongoose = require('mongoose'); | ||
let finalFilterQuery = []; | ||
let filterFields = []; | ||
if(filterQuery.length > 0 && quickSearchQuery.length > 0) { | ||
if(filterQuery && filterQuery.addFieldArr && filterQuery.addFieldArr.length > 0){ | ||
filterFields = filterQuery.addFieldArr; | ||
} | ||
if(filterQuery && filterQuery.query && filterQuery.query.length > 0 && quickSearchQuery.length > 0) { | ||
const quickSearch = {"$match" : { "$or" :[...quickSearchQuery] } }; | ||
finalFilterQuery = [quickSearch, ...filterQuery]; | ||
} else if(filterQuery.length > 0) { | ||
finalFilterQuery = [...filterQuery]; | ||
finalFilterQuery = [quickSearch, ...filterQuery.query]; | ||
} else if(filterQuery && filterQuery.query && filterQuery.query.length > 0) { | ||
finalFilterQuery = [...filterQuery.query]; | ||
} else if(quickSearchQuery.length > 0) { | ||
@@ -68,2 +74,3 @@ finalFilterQuery = [{"$match" : {"$or" : [...quickSearchQuery]}}]; | ||
const aggregationPipeline = [ | ||
...filterFields, | ||
...finalFilterQuery, | ||
@@ -112,8 +119,13 @@ ...groupQuery, | ||
let finalFilterQuery = []; | ||
let filterFields = []; | ||
if(filterQuery.length > 0 && quickSearchQuery.length > 0) { | ||
if(filterQuery && filterQuery.addFieldArr && filterQuery.addFieldArr.length > 0){ | ||
filterFields = filterQuery.addFieldArr; | ||
} | ||
if(filterQuery && filterQuery.query && filterQuery.query.length > 0 && quickSearchQuery.length > 0) { | ||
const quickSearch = {"$match" : { "$or" :[...quickSearchQuery] } }; | ||
finalFilterQuery = [quickSearch, ...filterQuery]; | ||
} else if(filterQuery.length > 0) { | ||
finalFilterQuery = [...filterQuery]; | ||
finalFilterQuery = [quickSearch, ...filterQuery.query]; | ||
} else if(filterQuery && filterQuery.query && filterQuery.query.length > 0) { | ||
finalFilterQuery = [...filterQuery.query]; | ||
} else if(quickSearchQuery.length > 0) { | ||
@@ -136,2 +148,3 @@ finalFilterQuery = [{"$match" : {"$or" : [...quickSearchQuery]}}]; | ||
const aggregationPipeline = [ | ||
...filterFields, | ||
...finalFilterQuery, | ||
@@ -151,4 +164,10 @@ ...groupQuery, | ||
const columns = Object.keys(filterModel); | ||
const query = columns.map(column => buildColumnQuery(filterModel[column], column)); | ||
return query; | ||
const addFieldArr = []; | ||
const query = columns.map(column => { | ||
const addFieldObj = { $addFields: { }}; | ||
addFieldObj.$addFields[`${column}Type`] = { $type: `$${column}` }; | ||
addFieldArr.push(addFieldObj); | ||
return buildColumnQuery(filterModel[column], column) | ||
}); | ||
return {query, addFieldArr}; | ||
} | ||
@@ -378,4 +397,7 @@ | ||
case "endsWith": return { [key]: { "$regex": obj.filter + "$", '$options': 'i' } }; | ||
case "blank": return { $or : [ {[key]: {"$exists": true, "$eq": "" }}, {[key]: {"$exists": false}}]}; | ||
case "notBlank": return { [key]: { "$exists": true, "$ne": "" }}; | ||
case "blank": return { $expr: {$or: [{$and: [{ $eq: [`$${key}Type`, "array"] }, | ||
{ $or: [{ $eq: [{ $size: "$"+key }, 0] }, | ||
{ $eq: [{ $allElementsTrue: { $map: { input: `$${key}`, as: "item", in: { $eq: ["$$item", ""] } } } }, true] }]}]}, | ||
{$and: [{ $eq: [`$${key}Type`, "string"] },{ $eq: [`$${key}`, ""] }]}]}}; | ||
case "notBlank": return { $or :[ {[key]: { "$exists": true, "$ne": "" , "$type" : "string"}}, { [key]: {"$exists": true , "$type" : "array", "$ne" : [""], "$not": {"$size": 0}}}]}; | ||
case "false": return { [key]: false}; | ||
@@ -492,2 +514,13 @@ case "true": return { [key]: true}; | ||
addFieldObj[rowGroupCols[excessIndex].id] = "$_id"; | ||
///add unique count fields | ||
if(aggregationArray && aggregationArray.length > 0) { | ||
aggregationArray.map(aggre => { | ||
const aggKey = Object.keys(aggre); | ||
if(aggKey && aggre[aggKey] && aggre[aggKey].hasOwnProperty('$addToSet')){ | ||
addFieldObj[aggKey] = { $size: `$${aggKey}`} | ||
} | ||
}) | ||
} | ||
let addField = {"$addFields" : addFieldObj}; | ||
@@ -834,3 +867,3 @@ | ||
case 'count' : return {$sum : 1 } ; // counts each doc | ||
case 'count' : return { $addToSet: "$"+aggFunction.id+""}; // counts each doc | ||
} | ||
@@ -937,12 +970,17 @@ } | ||
function checkFlagCondition(type, flagVal, value) { | ||
const searchObj = splitSearchString(flagVal.toLowerCase()); | ||
const searchVals = searchObj.searchValArr ? searchObj.searchValArr : []; | ||
switch (type) { | ||
case "string": | ||
if(value && flagVal && value.toLowerCase().indexOf(flagVal.toLowerCase()) >= 0) { | ||
if(value && searchVals && searchVals.some(searchVal => value.toLowerCase().includes(searchVal.toLowerCase()))) { | ||
return true; | ||
} else return false; | ||
case "number": | ||
if(value && flagVal && value == flagVal) return true | ||
if(value && searchVals && searchVals.some(searchVal => value === searchVal)) return true | ||
else return false; | ||
case "object": | ||
if(value && flagVal && value.find(str => str && typeof str === 'string' && str.toLowerCase().includes(flagVal.toLowerCase()))) { | ||
value = value ? Object.assign([], value) : []; | ||
if(value && searchVals && value.find(str => str && typeof str === 'string' && searchVals.some(searchVal => str.toLowerCase().includes(searchVal.toLowerCase()))) ) { | ||
return true | ||
@@ -949,0 +987,0 @@ } else return false; |
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
42352
893