diff --git a/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/MongoExt.kt b/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/MongoExt.kt index 4817902..e75fe0a 100644 --- a/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/MongoExt.kt +++ b/src/gaea.mongo/src/main/kotlin/com/synebula/gaea/mongo/MongoExt.kt @@ -25,29 +25,33 @@ fun Query.select(fields: Array): Query { * 根据参数获取查询条件 * * @param params 参数列表 + * @param onWhere 获取字段查询方式的方法 */ -fun Query.where(params: Map?, onWhere: ((v: String) -> Operator) = { Operator.eq }): Query { +fun Query.where(params: Map?, onWhere: ((v: String) -> Operator) = { Operator.default }): Query { val criteria = Criteria() val rangeStartSuffix = ".start" //范围查询开始后缀 val rangeEndSuffix = ".end" //范围查询结束后缀 if (params != null) { for (param in params) { val key = param.key - when { - //以范围查询开始后缀结尾表示要用大于或等于查询方式 - key.endsWith(rangeStartSuffix) -> - criteria.and(key.removeSuffix(rangeStartSuffix)).gte(param.value) - //以范围查询结束后缀结尾表示要用小于或等于查询方式 - key.endsWith(rangeEndSuffix) -> - criteria.and(key.removeSuffix(rangeEndSuffix)).gte(param.value) - else -> when (onWhere(key)) { - Operator.eq -> criteria.and(key).`is`(param.value) - Operator.ne -> criteria.and(key).ne(param.value) - Operator.lt -> criteria.and(key).lt(param.value) - Operator.gt -> criteria.and(key).gt(param.value) - Operator.lte -> criteria.and(key).lte(param.value) - Operator.gte -> criteria.and(key).gte(param.value) - Operator.like -> criteria.and(key).regex(param.value.toString()) + when (onWhere(key)) { + Operator.eq -> criteria.and(key).`is`(param.value) + Operator.ne -> criteria.and(key).ne(param.value) + Operator.lt -> criteria.and(key).lt(param.value) + Operator.gt -> criteria.and(key).gt(param.value) + Operator.lte -> criteria.and(key).lte(param.value) + Operator.gte -> criteria.and(key).gte(param.value) + Operator.like -> criteria.and(key).regex(param.value.toString()) + Operator.default -> { + when { + //以范围查询开始后缀结尾表示要用大于或等于查询方式 + key.endsWith(rangeStartSuffix) -> + criteria.and(key.removeSuffix(rangeStartSuffix)).gte(param.value) + //以范围查询结束后缀结尾表示要用小于或等于查询方式 + key.endsWith(rangeEndSuffix) -> + criteria.and(key.removeSuffix(rangeEndSuffix)).gte(param.value) + else -> criteria.and(key).`is`(param.value) + } } } } diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Operator.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/query/Operator.kt index f7a21d4..523cf30 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/query/Operator.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/query/Operator.kt @@ -34,5 +34,10 @@ enum class Operator { /** * 模糊匹配 */ - like + like, + + /** + * 默认查询, 未定义查询方式, 业务人员自己实现查询方式 + */ + default } \ No newline at end of file