feat: exclude some filter fileds from getting converted to ObjectId
This commit is contained in:
@@ -2,12 +2,17 @@ import mongoose from "mongoose";
|
|||||||
|
|
||||||
type MongoFilter = Record<string, any>;
|
type MongoFilter = Record<string, any>;
|
||||||
|
|
||||||
function convertValue(value: string) {
|
const objectIdConversion = ["taggedUsers"];
|
||||||
|
|
||||||
|
function convertValue(field: string, value: string) {
|
||||||
if (!isNaN(Number(value))) {
|
if (!isNaN(Number(value))) {
|
||||||
return Number(value);
|
return Number(value);
|
||||||
} else if (!isNaN(new Date(value).getTime())) {
|
} else if (!isNaN(new Date(value).getTime())) {
|
||||||
return new Date(value);
|
return new Date(value);
|
||||||
} else if (mongoose.Types.ObjectId.isValid(value)) {
|
} else if (
|
||||||
|
mongoose.Types.ObjectId.isValid(value) &&
|
||||||
|
!objectIdConversion.includes(field)
|
||||||
|
) {
|
||||||
return new mongoose.Types.ObjectId(value);
|
return new mongoose.Types.ObjectId(value);
|
||||||
} else if (value === "true") {
|
} else if (value === "true") {
|
||||||
return true;
|
return true;
|
||||||
@@ -35,7 +40,9 @@ function formulaToMongoFilter(formula: string): MongoFilter {
|
|||||||
.map((v) => v.trim().replace(/^['"]|['"]$/g, ""));
|
.map((v) => v.trim().replace(/^['"]|['"]$/g, ""));
|
||||||
|
|
||||||
// Convert each value to appropriate type
|
// Convert each value to appropriate type
|
||||||
const parsedValues = valueArray.map((value) => convertValue(value));
|
const parsedValues = valueArray.map((value) =>
|
||||||
|
convertValue(trimmedField, value)
|
||||||
|
);
|
||||||
|
|
||||||
// If no operator or equals operator, use $in
|
// If no operator or equals operator, use $in
|
||||||
if (!operator || operator === "=") {
|
if (!operator || operator === "=") {
|
||||||
@@ -63,7 +70,7 @@ function formulaToMongoFilter(formula: string): MongoFilter {
|
|||||||
if (trimmedField === "tenantId") return {};
|
if (trimmedField === "tenantId") return {};
|
||||||
|
|
||||||
// Convert value to appropriate type (date or number if possible)
|
// Convert value to appropriate type (date or number if possible)
|
||||||
let parsedValue: any = convertValue(trimmedValue);
|
let parsedValue: any = convertValue(trimmedField, trimmedValue);
|
||||||
|
|
||||||
// Convert operator to MongoDB operator
|
// Convert operator to MongoDB operator
|
||||||
switch (operator) {
|
switch (operator) {
|
||||||
|
|||||||
Reference in New Issue
Block a user