主要利用mongodbTemplate 操作
导入Pom:
<!--spring 操作Mongodb -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
</dependency>
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.BulkOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
先附上CRUD:
Mongogodb 新增:
@ApiOperation(value = "Mongogodb 新增", notes = "Mongogodb 新增")
@RequestMapping(value = "/mongodbinsert", method = RequestMethod.POST)
public List<SysUser> mongodbInsert() {
List<SysUser>listsysuser = new ArrayList<>(3);
listsysuser.add(new SysUser("12344","男","LJ"));
listsysuser.add(new SysUser("556667","女","lxd"));
listsysuser.add(new SysUser("0007","男","lhz"));
//List<SysUser> insert = (List<SysUser>)mongoTemplate.insert(listsysuser, SysUser.class);
List<SysUser> insert = (List<SysUser>)mongoTemplate.insert(listsysuser,SysUser.class);
return insert;
}
Mongogodb 条件查询:
@ApiOperation(value = "Mongogodb 根据条件查询", notes = "Mongogodb 根据条件查询")
@RequestMapping(value = "/mongodbquerybywhy/{userNameInput}/{sexInput}", method = RequestMethod.POST)
public List<SysUser> mongodbquery(@ApiParam(name = "userNameInput",value = "用户名",required = true) @PathVariable(value = "userNameInput",required = true)String userNameInput,
@ApiParam(name = "sexInput",value = "性别",required = true) @PathVariable(value = "sexInput",required = true)String sexInput) throws UnsupportedEncodingException {
//new Query(Criteria.where("onumber").is("002").and("cname").is("zcy")) 多条件组合
//Query query = new Query(Criteria.where("sex").is(sexInput).and(userName).is(userNameInput));
//上面也可以或者下面的、
//sexInput = new String(sexInput.getBytes("ISO-8859-1"), "utf8");
Query query = new Query(Criteria.where("sex").is(sexInput));
//增加条件
query.addCriteria(Criteria.where("userName").is(userNameInput));
//增加排序(倒序)
//query.with(Sort.by(Sort.Order.desc("ordertime")));
List<SysUser> list = mongoTemplate.find(query, SysUser.class);
return list;
}
Mongogodb 条件修改:
@ApiOperation(value = "Mongogodb 根据条件修改", notes = "Mongogodb 根据条件修改")
@RequestMapping(value = "/mongodbput", method = RequestMethod.PUT)
public Long mongodbdelete(@ApiParam(name = "userId",value = "用户ID",required = true)
@RequestParam(value = "userId",required = true)String userId) {
Query query = new Query(Criteria.where("userId").is(userId));
Update update = new Update().set("userName","gmy");
UpdateResult updateResult = mongoTemplate.updateFirst(query, update, SysUser.class);
return updateResult.getModifiedCount();
}
Mongogodb 根据条件删除
@ApiOperation(value = "Mongogodb 根据条件删除", notes = "Mongogodb 根据条件删除")
@RequestMapping(value = "/mongodbdeletebywhy", method = RequestMethod.DELETE)
public void mongodbdeletebywhy(@ApiParam(name = "userId",value = "用户ID",required = true)
@RequestParam(value = "userId",required = true)String userId) {
Query query = new Query(Criteria.where("userId").is(userId));
DeleteResult remove = mongoTemplate.remove(query, SysUser.class);
}
Mongogodb 批量插入(Bulk):
@ApiOperation(value = "Mongogodb Bulk批量插入", notes = "Mongogodb Bulk批量插入")
@RequestMapping(value = "/mongodbbulkinsert", method = RequestMethod.POST)
public void mongodbBulkInsert() {
for (int i=0;i<3;i++) {
List<Address> listaddresses = new ArrayList<>(3);
Address address1 = new Address("go", "by", 4);
Address address2 = new Address("to", "my", 6);
Address address3 = new Address("school", "self", 7);
listaddresses.add(address1);
listaddresses.add(address2);
listaddresses.add(address3);
ByMe m1 = new ByMe("hr1", "男1", "lainxi", "17", 30, listaddresses);
// BulkMode.UNORDERED:表示并行处理,遇到错误时能继续执行不影响其他操作;BulkMode.ORDERED:表示顺序执行,遇到错误时会停止所有执行
//sysUser1集合名称
BulkOperations ops = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, "byme");
ops.insert(m1);
ops.execute();
}
}
Mongogodb 批量插入(insertAll):
@ApiOperation(value = "Mongogodb 批量插入insertAll", notes = "Mongogodb 批量插入insertAll")
@RequestMapping(value = "/mongodbinsertall", method = RequestMethod.POST)
public List<ByUser> mongodbInsertAll() {
ByUser m1 = new ByUser("6", "男", "成龙","68","26");
ByUser m2 = new ByUser("7", "女", "王兴","38","10");
ByUser m3 = new ByUser("8", "女", "郭富城","98","40");
List<ByUser> list = new ArrayList<>();
list.add(m1);
list.add(m2);
list.add(m3);
List<ByUser> sysUsers = (List<ByUser>)mongoTemplate.insertAll(list);
return sysUsers;
}
Mongogodb 批量修改:
@ApiOperation(value = "Mongogodb 批量修改", notes = "Mongogodb 批量修改")
@RequestMapping(value = "/mongodbbulkupdate/{userNameInput}/{sexInput}", method = RequestMethod.POST)
public void mongodbBulkUpdate(@ApiParam(name = "userNameInput",value = "用户名",required = true) @PathVariable(value = "userNameInput",required = true)String userNameInput,
@ApiParam(name = "sexInput",value = "性别",required = true) @PathVariable(value = "sexInput",required = true)String sexInput) {
Query qsex = new Query(Criteria.where("sex").is(sexInput));
Update usex = new Update().set("sex","300");
Query qusername = new Query(Criteria.where("userName").is(userNameInput));
Update uusername = new Update().set("userName","jkl");
BulkOperations ops = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, "sysuser");
ops.updateMulti(qsex,usex).execute();
ops.updateMulti(qusername,uusername).execute();
}
Mongogodb 批量删除(Bulk):
@ApiOperation(value = "Mongogodb 批量删除", notes = "Mongogodb 批量删除")
@RequestMapping(value = "/mongodbbulkdelete/{str}", method = RequestMethod.POST)
public void mongodbBulkDelete(@ApiParam(name = "str",value = "用户多个ID用 ,隔开",required = true)
@PathVariable(value = "str",required = true)String str) {
String[] split = str.split(",");
List<Query>list = new ArrayList<>(split.length);
for (int i=0;i<split.length;i++){
// quserid.addCriteria(Criteria.where("userId").is(split[i]));
Query query = new Query(Criteria.where("userId").is(split[i]));
list.add(query);
}
BulkOperations ops = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, "sysuser");
ops.remove(list).execute();
}
spring管道Aggregation的条件查询:
@ApiOperation(value = "Mongogodb AggregateGroup 查询", notes = "Mongogodb AggregateGroup 查询")
@RequestMapping(value = "/mongodbAggregateGroup", method = RequestMethod.GET)
public List<ByUser> mongodbAggregateGroup() {
//"userName", "age", "length",
TypedAggregation<ByUser> basicDBObjectTypedAggregation = newAggregation(
//输入类型 写不写都行!!!
ByUser.class,
//展示的字段,若不展示则显示为null。
project("userId","sex", "userName", "age", "length"),
group("userId","sex")
//first分组字段排序后获取其第一个值
.first("sex").as("sex"),
sort(Sort.Direction.ASC,"userId"),
match(Criteria.where("sex").is("男"))
);
//ByUser.class 输出类型
AggregationResults<ByUser> aggregate = mongoTemplate.aggregate(basicDBObjectTypedAggregation, ByUser.class);
return aggregate.getMappedResults();
}
输出:
/* 输出
[
{
"userId": "3",
"sex": "男",
"userName": "连喜灯",
"age": null,
"length": null
},
{
"userId": "4",
"sex": "男",
"userName": "连喜灯",
"age": null,
"length": null
}
]
project:只是把字段在管道中传下去,因为字段需要进行别的一下操作,比如排序,分组等。
group:分组,最终决定展示哪些字段的值(若group中少哪些字段则显示为null)
@ApiOperation(value = "Mongogodb AggregateGroup previousOperation()查询", notes = "Mongogodb AggregateGroup previousOperation()查询")
@RequestMapping(value = "/mongodbGetPreviousOperation", method = RequestMethod.GET)
public List<ByUser> mongodbGetPreviousOperation() {
//"userName", "age", "length",
TypedAggregation<ByUser> basicDBObjectTypedAggregation = newAggregation(
//输入类型 不写只是返回值变了!!!
ByUser.class,
//gt 大于 gte大于等于 lt 小于 lte 小于等于
match(Criteria.where("length").gt("19")),
//first 获取到某个字段一般与as一块用
//group("age","length").count().as("num"),
group("age","length").sum("age").as("num").sum("length").as("length"),
//and 获取到某个字段一般与as一块用 总感觉和first 差不多
//and("age").previousOperation() 一般是跟随project方法,and 和 previousOperation一块用
project("num"),
sort(Sort.Direction.DESC,"num")
);
//ByUser.class 输出类型
AggregationResults<ByUser> aggregate = mongoTemplate.aggregate(basicDBObjectTypedAggregation, ByUser.class);
return aggregate.getMappedResults();
}
输出:
[
{
"userId": null,
"sex": null,
"userName": null,
"age": "98",
"length": "40"
},
{
"userId": null,
"sex": null,
"userName": null,
"age": "68",
"length": "26"
}
]
1:gt 大于 gte大于等于 lt 小于 lte 小于等于
2:and()一般和as()结合用,and()写的是前一个操作的字段,as()给这个字段起一个别名,可用于管道中下一个操作的字段别名。
3:previousOperation() 和unwind自己不是很明白!!!!