mirror of
https://github.com/strapi/strapi.git
synced 2025-11-13 08:38:09 +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"
|
"npm": ">= 6.0.0"
|
||||||
},
|
},
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -140,9 +140,9 @@ const buildQueryJoins = (qb, { model, where }) => {
|
|||||||
let tmpModel = model;
|
let tmpModel = model;
|
||||||
for (let part of parts) {
|
for (let part of parts) {
|
||||||
const association = tmpModel.associations.find(assoc => assoc.alias === part);
|
const association = tmpModel.associations.find(assoc => assoc.alias === part);
|
||||||
const assocModel = findModelByAssoc(association);
|
|
||||||
|
|
||||||
if (association) {
|
if (association) {
|
||||||
|
const assocModel = findModelByAssoc(association);
|
||||||
buildSingleJoin(qb, tmpModel, assocModel, association);
|
buildSingleJoin(qb, tmpModel, assocModel, association);
|
||||||
tmpModel = assocModel;
|
tmpModel = assocModel;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -292,36 +292,55 @@ const buildQueryMatches = (model, filters) => {
|
|||||||
return [];
|
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 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) {
|
switch (operator) {
|
||||||
case 'eq':
|
case 'eq':
|
||||||
return { [field]: utils.valueToId(value) };
|
return { [field]: val };
|
||||||
case 'ne':
|
case 'ne':
|
||||||
return { [field]: { $ne: utils.valueToId(value) } };
|
return { [field]: { $ne: val } };
|
||||||
case 'lt':
|
case 'lt':
|
||||||
return { [field]: { $lt: value } };
|
return { [field]: { $lt: val } };
|
||||||
case 'lte':
|
case 'lte':
|
||||||
return { [field]: { $lte: value } };
|
return { [field]: { $lte: val } };
|
||||||
case 'gt':
|
case 'gt':
|
||||||
return { [field]: { $gt: value } };
|
return { [field]: { $gt: val } };
|
||||||
case 'gte':
|
case 'gte':
|
||||||
return { [field]: { $gte: value } };
|
return { [field]: { $gte: val } };
|
||||||
case 'in':
|
case 'in':
|
||||||
return {
|
return {
|
||||||
[field]: {
|
[field]: {
|
||||||
$in: Array.isArray(value) ? value.map(utils.valueToId) : [utils.valueToId(value)],
|
$in: Array.isArray(val) ? val : [val],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
case 'nin':
|
case 'nin':
|
||||||
return {
|
return {
|
||||||
[field]: {
|
[field]: {
|
||||||
$nin: Array.isArray(value) ? value.map(utils.valueToId) : [utils.valueToId(value)],
|
$nin: Array.isArray(val) ? val : [val],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
case 'contains': {
|
case 'contains': {
|
||||||
return {
|
return {
|
||||||
[field]: {
|
[field]: {
|
||||||
$regex: value,
|
$regex: `${val}`,
|
||||||
$options: 'i',
|
$options: 'i',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -329,19 +348,19 @@ const buildWhereClause = ({ field, operator, value }) => {
|
|||||||
case 'ncontains':
|
case 'ncontains':
|
||||||
return {
|
return {
|
||||||
[field]: {
|
[field]: {
|
||||||
$not: new RegExp(value, 'i'),
|
$not: new RegExp(val, 'i'),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
case 'containss':
|
case 'containss':
|
||||||
return {
|
return {
|
||||||
[field]: {
|
[field]: {
|
||||||
$regex: value,
|
$regex: `${val}`,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
case 'ncontainss':
|
case 'ncontainss':
|
||||||
return {
|
return {
|
||||||
[field]: {
|
[field]: {
|
||||||
$not: new RegExp(value),
|
$not: new RegExp(val),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -53,4 +53,4 @@
|
|||||||
"npm": ">= 6.0.0"
|
"npm": ">= 6.0.0"
|
||||||
},
|
},
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -51,4 +51,4 @@
|
|||||||
"npm": ">= 6.0.0"
|
"npm": ">= 6.0.0"
|
||||||
},
|
},
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -51,4 +51,4 @@
|
|||||||
"npm": ">= 6.0.0"
|
"npm": ">= 6.0.0"
|
||||||
},
|
},
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -54,4 +54,4 @@
|
|||||||
"npm": ">= 6.0.0"
|
"npm": ">= 6.0.0"
|
||||||
},
|
},
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -53,4 +53,4 @@
|
|||||||
"npm": ">= 6.0.0"
|
"npm": ">= 6.0.0"
|
||||||
},
|
},
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,4 +47,4 @@
|
|||||||
"npm": ">= 6.0.0"
|
"npm": ">= 6.0.0"
|
||||||
},
|
},
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -56,4 +56,4 @@
|
|||||||
"npm": ">= 6.0.0"
|
"npm": ">= 6.0.0"
|
||||||
},
|
},
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -88,7 +88,7 @@ const convertStartQueryParams = startQuery => {
|
|||||||
const startAsANumber = _.toNumber(startQuery);
|
const startAsANumber = _.toNumber(startQuery);
|
||||||
|
|
||||||
if (!_.isInteger(startAsANumber) || startAsANumber < 0) {
|
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 {
|
return {
|
||||||
@ -104,7 +104,7 @@ const convertLimitQueryParams = limitQuery => {
|
|||||||
const limitAsANumber = _.toNumber(limitQuery);
|
const limitAsANumber = _.toNumber(limitQuery);
|
||||||
|
|
||||||
if (!_.isInteger(limitAsANumber) || (limitAsANumber !== -1 && limitAsANumber < 0)) {
|
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 {
|
return {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user