济南校园兼职网站建设,模板网站不利于seo吗,烟台公司网站定制,做固定背景网站本意是想查查mongo数据库的int类型的like怎么查#xff0c;但是好像没 解决这个问题。
精确查询#xff1b;模糊查询#xff1b;分页查询#xff0c;每页多少#xff1a;按某个字段排序(或升或降)#xff1a;查询数量#xff1a;大于#xff0c;小于#xff0c;等于但是好像没 解决这个问题。
精确查询模糊查询分页查询每页多少按某个字段排序(或升或降)查询数量大于小于等于且或某个字段不为空某个字段不存在查询在某个范围内删除等等查询。 一. 常用查询:
1. 查询一条数据:(多用于保存时判断db中是否已有当前数据,这里 is 精确匹配,模糊匹配 使用regex...)
[javascript] view plain copy public PageUrl getByUrl(String url) { return findOne(new Query(Criteria.where(url).is(url)),PageUrl.class); } 2. 查询多条数据:linkUrl.id 属于分级查询
[javascript] view plain copy public ListPageUrl getPageUrlsByUrl(int begin, int end,String linkUrlid) { Query query new Query(); query.addCriteria(Criteria.where(linkUrl.id).is(linkUrlid)); return find(query.limit(end - begin).skip(begin), PageUrl.class); } 3.模糊查询:-----关键字---regex
[javascript] view plain copy public long getProcessLandLogsCount(ListCondition conditions) { Query query new Query(); if (conditions ! null conditions.size() 0) { for (Condition condition : conditions) { query.addCriteria(Criteria.where(condition.getKey()).regex(.*?\\ condition.getValue().toString() .*)); } } return count(query, ProcessLandLog.class); }
最下面我在代码亲自实践过的模糊查询只支持字段属性是字符串的查询你要是查字段属性是int的模糊查询还真没辙。 4.gte: 大于等于,lte小于等于...注意查询的时候各个字段的类型要和mongodb中数据类型一致
[javascript] view plain copy public ListProcessLandLog getProcessLandLogs(int begin,int end,ListCondition conditions,String orderField,Direction direction) { Query query new Query(); if (conditions ! null conditions.size() 0) { for (Condition condition : conditions) { if(condition.getKey().equals(time)){ query.addCriteria(Criteria.where(time).gte(condition.getValue())); //gte: 大于等于 }else if(condition.getKey().equals(insertTime)){ query.addCriteria(Criteria.where(insertTime).gte(condition.getValue())); }else{ query.addCriteria(Criteria.where(condition.getKey()).is(condition.getValue())); } } } return find(query.limit(end - begin).skip(begin).with(new Sort(new Sort.Order(direction, orderField))), ProcessLandLog.class); } public ListDpsLand getDpsLandsByTime(int begin, int end, Date beginDate,Date endDate) { return find(new Query(Criteria.where(updateTime).gte(beginDate).lte(endDate)).limit(end - begin).skip(begin), DpsLand.class); } 查询字段不存在的数据 -----关键字---not
[javascript] view plain copy public ListGoodsDetail getGoodsDetails2(int begin, int end) { Query query new Query(); query.addCriteria(Criteria.where(goodsSummary).not()); return find(query.limit(end - begin).skip(begin),GoodsDetail.class); } 查询字段不为空的数据 -----关键字---ne
[java] view plain copy Criteria.where(key1).ne().ne(null) 查询或语句a || b ----- 关键字---orOperator
[java] view plain copy Criteria criteria new Criteria();
criteria.orOperator(Criteria.where(key1).is(0),Criteria.where(key1).is(null)); 查询且语句a b ----- 关键字---and
[java] view plain copy Criteria criteria new Criteria();
criteria.and(key1).is(false);
criteria.and(key2).is(type);
Query query new Query(criteria);
long totalCount this.mongoTemplate.count(query, Xxx.class); 查询一个属性的子属性例如查下面数据的key2.keyA的语句
[java] view plain copy var s { key1: value1, key2: { keyA: valueA, keyB: valueB } }; Query({key2.keyA:?0})
ListAsset findAllBykeyA(String keyA); 5. 查询数量:----- 关键字---count
[javascript] view plain copy public long getPageInfosCount(ListCondition conditions) { Query query new Query(); if (conditions ! null conditions.size() 0) { for (Condition condition : conditions) { query.addCriteria(Criteria.where(condition.getKey()).is(condition.getValue())); } } return count(query, PageInfo.class); } 查找包含在某个集合范围----- 关键字---in
[java] view plain copy Criteria criteria new Criteria();
Object [] o new Object[]{0, 1, 2}; //包含所有
criteria.and(type).in(o);
Query query new Query(criteria);
query.with(new Sort(new Sort.Order(Direction.ASC, type))).with(new Sort(new Sort.Order(Direction.ASC, title)));
ListWidgetMonitor list this.mongoTemplate.find(query, WidgetMonitor.class); 6. 更新一条数据的一个字段:
[javascript] view plain copy public WriteResult updateTime(PageUrl pageUrl) { String id pageUrl.getId(); return updateFirst(new Query(Criteria.where(id).is(id)),Update.update(updateTime, pageUrl.getUpdateTime()), PageUrl.class); } 7. 更新一条数据的多个字段:
[javascript] view plain copy //调用更新
private void updateProcessLandLog(ProcessLandLog processLandLog, int crawlResult) { ListString fields new ArrayListString(); ListObject values new ArrayListObject(); fields.add(state); fields.add(result); fields.add(time); values.add(1); values.add(crawlResult); values.add(Calendar.getInstance().getTime()); processLandLogReposity.updateProcessLandLog(processLandLog, fields, values); }
//更新
public void updateProcessLandLog(ProcessLandLog land, ListString fields,ListObject values) { Update update new Update(); int size fields.size(); for(int i 0 ; i size; i){ String field fields.get(i); Object value values.get(i); update.set(field, value); } updateFirst(new Query(Criteria.where(id).is(land.getId())), update,ProcessLandLog.class); } 8. 删除数据:
[javascript] view plain copy public void deleteObject(ClassT clazz,String id) { remove(new Query(Criteria.where(id).is(id)),clazz); } 9.保存数据:
[javascript] view plain copy //插入一条数据
public void saveObject(Object obj) { insert(obj); } //插入多条数据
public void saveObjects(ListT objects) { for(T t:objects){ insert(t); } } 我自己使用的例子
下面例子涉及到
精确查询is
模糊查询regex
分页查询每页多少skiplimit
按某个字段排序(或升或降)new Sort(new Sort.Order(Sort.Direction.ASC, port))
查询数量count
[java] view plain copy public MapString, Object getAppPortDetailByPage(int pageNo, int pageSize, String order, String sortBy, String appPortType, String appPortSeacherName) { Criteria criteria new Criteria(); if (!appPortType.equals()) { if (!appPortType.equals(all)) { //DB表里的字段----appmanageType //下同 port protocol 也是DB表的字段 criteria.and(appmanageType).is(appPortType); } } if (!appPortSeacherName.equals()) { try { criteria.orOperator(Criteria.where(port).is(Integer.parseInt(appPortSeacherName)), Criteria.where(protocol).regex(.*? appPortSeacherName .*)); }catch (Exception e){ criteria.orOperator(Criteria.where(protocol).regex(.*? appPortSeacherName .*)); } } MapString, Object result Maps.newHashMap(); Query query new Query(criteria); query.skip((pageNo - 1) * pageSize); query.limit(pageSize); if(order ! null sortBy ! null){ query.with(new Sort(new Sort.Order(order.equals(asc) ? Sort.Direction.ASC : Sort.Direction.DESC, sortBy))); }else { query.with(new Sort(new Sort.Order(Sort.Direction.ASC, port))); } ListAppportmanage list this.mongoTemplate.find(query, Appportmanage.class); long count this.mongoTemplate.count(query, Appportmanage.class); result.put(datas, list); result.put(size, count); return result;
} mongo数据库里面像搜索数据类型为int的字段
然后想使用like语句来着但是没有实现
因为我的port端口存的事int属性
但是在列表页面要支持字段搜索的话然后我的int类型的端口字段就不支持搜索了
然后就考虑既然是端口那就是一个固定的唯一的
为什么要支持like语句呢
你搜索端口号是1的就搜出来的是1的端口号就对了而不是11121等等都个搜索出来
所以
对去其他的字符串 类型的字段你使用like语句搜索
我是没意见的
要是非得 实现int类型的like搜索
我 也不知道啊。
只有改数据结构
让int型变成string型的话
就可以like搜索啦。