mirror of
https://github.com/strapi/strapi.git
synced 2025-11-01 10:23:34 +00:00
Handle orWhere in mongo and format value / cast
This commit is contained in:
parent
6fcb38780d
commit
f8e8928d8a
@ -55,4 +55,4 @@
|
||||
"npm": ">= 6.0.0"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
|
||||
@ -140,9 +140,9 @@ const buildQueryJoins = (qb, { model, where }) => {
|
||||
let tmpModel = model;
|
||||
for (let part of parts) {
|
||||
const association = tmpModel.associations.find(assoc => assoc.alias === part);
|
||||
const assocModel = findModelByAssoc(association);
|
||||
|
||||
if (association) {
|
||||
const assocModel = findModelByAssoc(association);
|
||||
buildSingleJoin(qb, tmpModel, assocModel, association);
|
||||
tmpModel = assocModel;
|
||||
}
|
||||
|
||||
@ -292,36 +292,55 @@ const buildQueryMatches = (model, filters) => {
|
||||
return [];
|
||||
};
|
||||
|
||||
const formatValue = value => {
|
||||
if (Array.isArray(value)) {
|
||||
return value.map(formatValue);
|
||||
}
|
||||
|
||||
const number = _.toNumber(value);
|
||||
if (_.isFinite(number)) return number;
|
||||
|
||||
return utils.valueToId(value);
|
||||
};
|
||||
|
||||
const buildWhereClause = ({ field, operator, value }) => {
|
||||
const val = formatValue(value);
|
||||
|
||||
if (Array.isArray(val) && !['in', 'nin'].includes(operator)) {
|
||||
return {
|
||||
$or: val.map(value => buildWhereClause({ field, operator, value })),
|
||||
};
|
||||
}
|
||||
|
||||
switch (operator) {
|
||||
case 'eq':
|
||||
return { [field]: utils.valueToId(value) };
|
||||
return { [field]: val };
|
||||
case 'ne':
|
||||
return { [field]: { $ne: utils.valueToId(value) } };
|
||||
return { [field]: { $ne: val } };
|
||||
case 'lt':
|
||||
return { [field]: { $lt: value } };
|
||||
return { [field]: { $lt: val } };
|
||||
case 'lte':
|
||||
return { [field]: { $lte: value } };
|
||||
return { [field]: { $lte: val } };
|
||||
case 'gt':
|
||||
return { [field]: { $gt: value } };
|
||||
return { [field]: { $gt: val } };
|
||||
case 'gte':
|
||||
return { [field]: { $gte: value } };
|
||||
return { [field]: { $gte: val } };
|
||||
case 'in':
|
||||
return {
|
||||
[field]: {
|
||||
$in: Array.isArray(value) ? value.map(utils.valueToId) : [utils.valueToId(value)],
|
||||
$in: Array.isArray(val) ? val : [val],
|
||||
},
|
||||
};
|
||||
case 'nin':
|
||||
return {
|
||||
[field]: {
|
||||
$nin: Array.isArray(value) ? value.map(utils.valueToId) : [utils.valueToId(value)],
|
||||
$nin: Array.isArray(val) ? val : [val],
|
||||
},
|
||||
};
|
||||
case 'contains': {
|
||||
return {
|
||||
[field]: {
|
||||
$regex: value,
|
||||
$regex: `${val}`,
|
||||
$options: 'i',
|
||||
},
|
||||
};
|
||||
@ -329,19 +348,19 @@ const buildWhereClause = ({ field, operator, value }) => {
|
||||
case 'ncontains':
|
||||
return {
|
||||
[field]: {
|
||||
$not: new RegExp(value, 'i'),
|
||||
$not: new RegExp(val, 'i'),
|
||||
},
|
||||
};
|
||||
case 'containss':
|
||||
return {
|
||||
[field]: {
|
||||
$regex: value,
|
||||
$regex: `${val}`,
|
||||
},
|
||||
};
|
||||
case 'ncontainss':
|
||||
return {
|
||||
[field]: {
|
||||
$not: new RegExp(value),
|
||||
$not: new RegExp(val),
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@ -53,4 +53,4 @@
|
||||
"npm": ">= 6.0.0"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
|
||||
@ -51,4 +51,4 @@
|
||||
"npm": ">= 6.0.0"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
|
||||
@ -51,4 +51,4 @@
|
||||
"npm": ">= 6.0.0"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
|
||||
@ -54,4 +54,4 @@
|
||||
"npm": ">= 6.0.0"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
|
||||
@ -53,4 +53,4 @@
|
||||
"npm": ">= 6.0.0"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,4 +47,4 @@
|
||||
"npm": ">= 6.0.0"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
|
||||
@ -56,4 +56,4 @@
|
||||
"npm": ">= 6.0.0"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
|
||||
@ -88,7 +88,7 @@ const convertStartQueryParams = startQuery => {
|
||||
const startAsANumber = _.toNumber(startQuery);
|
||||
|
||||
if (!_.isInteger(startAsANumber) || startAsANumber < 0) {
|
||||
throw new Error(`convertStartQueryParams expected a positive integer go ${startAsANumber}`);
|
||||
throw new Error(`convertStartQueryParams expected a positive integer got ${startAsANumber}`);
|
||||
}
|
||||
|
||||
return {
|
||||
@ -104,7 +104,7 @@ const convertLimitQueryParams = limitQuery => {
|
||||
const limitAsANumber = _.toNumber(limitQuery);
|
||||
|
||||
if (!_.isInteger(limitAsANumber) || (limitAsANumber !== -1 && limitAsANumber < 0)) {
|
||||
throw new Error(`convertLimitQueryParams expected a positive integer go ${limitAsANumber}`);
|
||||
throw new Error(`convertLimitQueryParams expected a positive integer got ${limitAsANumber}`);
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user