您当前的位置: 首页 >  Java

qq_34412985

暂无认证

  • 0浏览

    0关注

    1061博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

mongodb java crud项目中使用

qq_34412985 发布时间:2019-01-29 18:51:21 ,浏览量:0

最近项目上有个需求需要通过skuProperty查询出skuId,再通过skuId查询skuProperty,但是skuProperty最多有9个,通过mysql查询时即使分页查10条sku,关联属性查询有90多条吧,在navicat上执行得1.5s-2s,同一页面会多次调用此接口,有10s左右,所以需要优化,加缓存通过测试mongoDB可以满足需求,solr是否可以满足?查询数组的listkeyname:$all{"propertyCode":value,"propertyValueCode":value}

db.getCollection('test.test').find({"propertyCodePropertyValueCodeList":{$all:[{"propertyCode":"0101","propertyVaueCode":"01"}]}})

有个skuProperty还存入别的字段,不止propertyCode和propertyValueCode两个字段,所以不能直接使用$all,需要专门把那两个字段存入一个list,使用$all匹配

pom.xml文件中加入:spring-boot-starter-data-mongodb  //artifactId

yml文件中:

spring.data.mongodb:

    host:10.130.207.155

    port:27017

    database:discountdb

    username:disc2017

    password:disc@TK123

查询时BasicDBList basicDBList= new BasicDBList(); 

condition.get(0).entrySet().stream().forEach(entry->{

BasicDBObject basicDBObject = new BasicDBObject();

basicDBObject.put("propertyCode",entry.getKey());

basicDBObject.put("propertyValueCode",entry.getKey());

basicDBList.add(basicDBObject);

});

DBObject obj = new BasicDBObject();

obj.put("$all",basicDBList);

DBObject objParam = new BasicDBObject();

objParam.put("propertyCodePropertyValueCodeList",obj);

objParam.put("deleteFlag",0);

objParam.put("saleState",1);

Query query = new BasicQuery(objParam);//BasicQuery组织字符串也可以

//不使用实体接收 id是int类型和mong数据库_id不匹配实体是String或bigInt才可以直接查询映射封装

List returnList = new LinkedList();

query.skip(pageBean.getOffset().intValue);

query.skip(pageBean.getLimit().intValue);

mongoTemplate.executeQuery(query,collectonName,callback);

returnList.stream.forEach(dbObject->dbObject.removeField("_id"));

mongoTemplate.find(query,MerSku.class);//MerSku实体上加注解@Document spring.core.mongo

新增时如果遇到id需要转json处理去掉

mongoTemplate.insert(skuList,collectionName);//save方法  有相同key时会抛异常自己捕获异常  对应db.sku.insertMany()

更新时需要先查出来

Query query = new Query();

query.addCriteria(Criteria.where("_id").in(skuIdList));{"key":"value"} where("key").is(value)

Update.set("deleteFlag",1);

mongoTemplate.updateMulti(query,update,collectionName);

mongoTemplate.findAndModify(query,update,collectionName);

//1万多条,定时器每5s执行一次,每次1000一条

query.addCriteria(Criteria.where("skuPropertyList.propertyCode").is("JUZHU0102(b)199");//lvju

query.addCriteria(Criteria.where("skuPropertyList.propertyValueCode").is("04");

Update.set("skuPropertyList.$.propertyValueCode","03");//将集合对象中某字段04替换为03 每次只能替换一条数据

update.addToSet("propertyCodePropertyValueCodeList",":03");//添加03

update.pull("propertyCodePropertyValueCodeList",":04");//查询03和04都有的

数组中存入string,不能直接替换更新,可使用先添加后删除如只有04替换成03,可先加03,然后将03和04同时存在的数据删除掉04

查询指定key不存在的find({"key":false}),查询返回部分字段find({condition},{"key":1})

关注
打赏
1653291990
查看更多评论
立即登录/注册

微信扫码登录

0.0490s