当前位置: 首页 > news >正文

南充网站建设服务济南seo全网营销

南充网站建设服务,济南seo全网营销,北京网站建设制作,苏州网站制作哪家好需求 为方便使用人员对任务Task的搜索,需要根据number实现模糊搜索。 背景 之前设计的number是long类型,但是mongodb只支持string类型的正则匹配。 方案 修改number为string类型;新增一个冗余字段,用于模糊查询;在…

需求

为方便使用人员对任务Task的搜索,需要根据number实现模糊搜索。

背景

之前设计的number是long类型,但是mongodb只支持string类型的正则匹配。

方案

  1. 修改number为string类型;
  2. 新增一个冗余字段,用于模糊查询;
  3. 在查询地时候转换为string类型;

第一个方案的问题在于其他系统设计的也是long类型,如果修改为string类型了,那么系统之间的类型就不统一了。并且在查询其他系统时需要转换类型,比较麻烦。还有一个缺点是修改的影响范围比较大,所有出现的地方都需要更改。

第二个方案就是这样设计显得太过多余,会增加数据存储,且不好维护。

于是最后选择了第三个方案。

实现

为了使用mongoTemplate的分页和动态查询的功能,还需要兼容模糊number的功能。这里采取了一个折中的方案。

既先用模糊number的方法查询出所有Task的ids,然后在添加到条件中进行二次过滤。虽然这样有一点性能的损耗,但是在代码的实现难度上下降了很多,并且可以复用之前的查询代码。如果这里是性能瓶颈,最后可以优化,但是目前看没有问题。

具体实现如下:

1. 这里通过mongoTemplate执行mongo的aggregate命令,"$toString": "$number"将number转换为string。"isDeleted" : { "$ne" : true }这是查询的另一个条件,可以根据实际情况取舍。返回游标cursor进行数据的读取。

  private List<String> numberRegexMatch(Long number) {if (number == null) return null;String command ="{ aggregate: \"col_task\", "+ "pipeline: [   {"+ "        \"$match\": "+ "        {"+ "            \"$expr\": {"+ "                \"$regexMatch\": {"+ "                    \"input\": {"+ "                        \"$toString\": \"$number\""+ "                    },"+ "                    \"regex\": \"%s\""+ "                }"+ "            },"+ "\"$and\":[{"+ "\"isDeleted\" : { \"$ne\" : true }"+ "}]"+ "        }"+ "    }"+ "],"+ "cursor: { \"batchSize\": 10 }"+ "}";Document document = mongoTemplate.executeCommand(String.format(command, number));Document cursor = (Document) document.get("cursor");List<Document> firstBatch = (List<Document>) cursor.get("firstBatch");if (CollectionUtils.isEmpty(firstBatch))throw LogicalException.newInstance(LogicError.TASK_NOT_EXIST);return firstBatch.stream().map(e -> e.get("_id").toString()).collect(Collectors.toList());}

2. 将获取的ids设置到TaskCriteria中,然后调用之前的TaskRepository search方法动态查询,返回分页数据

MongoLambdaQuery是我封装的一个动态查询插件,详细可以参考博客:

基于lambda的mongodb查询插件_张家老院子的博客-CSDN博客

  public PageResult<AssetDTO> search(TaskCriteria taskCriteria) {try {taskCriteria.setIds(numberRegexMatch(taskCriteria.getNumber()));} catch (LogicalException e) {return new PageResult<>();}return new PageResult(taskRepository.search(taskCriteria).map(TaskDTO::newInstance));}@Repository
public interface TaskRepository extends MongoRepository<Task, String> {default Page<Task> search(TaskCriteria taskCriteria) {return MongoLambdaQuery.lambdaQuery(Task.class).like(Task::getNumber, taskCriteria.getNumber()).is(Task::getStatus, taskCriteria.getStatus()).in(Task::getAreaId, taskCriteria.getAreaIds()).is(Task::getModel, taskCriteria.getModel()).ne(Task::getIsDeleted, Boolean.TRUE).in(Task::getId, taskCriteria.getIds()).page(taskCriteria.getPagination());}
}

http://www.ds6.com.cn/news/82712.html

相关文章:

  • 自媒体平台是什么意思福州关键词优化平台
  • 做图的ppt模板下载网站太原seo排名优化软件
  • 都有哪些网站百度应用市场app下载安装
  • 编程一小时网站企业网站设计优化公司
  • 河北平台网站建设站长工具seo客户端
  • 做调查问卷用的网站或软件域名网站
  • 设一个网站链接为安全怎么做网络销售 市场推广
  • 做网站需知seo技术服务外包公司
  • 网站开发软件环境高级搜索指令
  • 做公司网站思路百度搜索页
  • 网站后台密码如何破解疫情最新消息
  • b2b网站做网络推广有用吗搜索引擎优化排名
  • 做一个15页的网站怎么做营销型制作网站公司
  • 网页设计遇到的问题及解决方案优化设计六年级下册数学答案
  • 茶叶价格网站建设浏览器下载大全
  • 信阳企业网站开发91永久免费海外地域网名
  • 移动电子商务网站建设如何接广告赚钱
  • 成年做羞羞的视频网站space佛山做优化的公司
  • 沈阳建站免费模板营销是什么
  • 网站建设费科目100%能上热门的文案
  • 虹口做网站价格百度知道网页版
  • 深圳市建局官网石家庄网站建设方案优化
  • 湖北招聘网苏州seo排名优化课程
  • python做网站的优势广东东莞疫情最新情况
  • 网站色调为绿色seo标题优化关键词怎么选
  • 网站制作排行榜西安百度首页优化
  • 给视频做特效的网站网站建设与管理
  • 德州网站制作网页制作接单平台
  • 怎样知道哪个网站做推广好seo案例分析100例
  • 山东嘉祥做网站的有哪几家链接购买