springboot+mongodb 整合的一些使用
- mongodb的配置
spring:
data:
mongodb:
uri: mongodb://139.9.183.232:27019/users-1 如果有密码
spring:
data:
mongodb:
uri: mongodb://帐号:密码@139.9.183.232:27019/users-1 - 操作
两种使用方式:MogoTemplate 和 继承 MogoRepository接口,类似于JPA操作
实体定义
@Document(collection = "user") // 文档集合的名称
public class User {
@Id //定义主键
private Integer id;
@Field(value = "name") // 定义属性的名称
private String name;
private String sex;
public User() {
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
- MongoTemplate 操作
插入
public <T> T insert(T objectToSave) // 如果有@Document(collection = "user") 则使用collection的值,否则使用实体的小写类名,如果存在相同的主键则会抛出异常 public <T> T insert(T objectToSave, String collectionName)
插入/更新
public <T> T save(T objectToSave) // 如果有@Document(collection = "user") 则使用collection的值,否则使用实体的小写类名,如何有相同的主键,则会进行更新操作 public <T> T save(T objectToSave, String collectionName) // 指定collection
批量插入
public <T> Collection<T> insertAll(Collection<? extends T> objectsToSave) public <T> Collection<T> insert(Collection<? extends T> batchToSave, String collectionName) // 可指定collection
批量插入并指定实体class
public <T> Collection<T> insert(Collection<? extends T> batchToSave, Class<?> entityClass)
查询操作
public Criteria and(String key) public static Criteria byExample(Example<?> example) public static Criteria byExample(Object example) public static Criteria where(String key) public Criteria(String key)
相关操作词
public Criteria is(@Nullable Object o) // 等于 public Criteria ne(@Nullable Object o) // 不等于 public Criteria lte(Object o) // 小于等于 public Criteria lt(Object o) // 小于 public Criteria gt(Object o) // 大于等于 public Criteria gte(Object o) // 大于 public Criteria in(Object... o) // 在数组里面 public Criteria in(Collection<?> c) // 在集合里面 public Criteria all(Object... o) // 满足里面的所有条件 public Criteria all(Collection<?> o) // 满足集合里面的所有条件 public Criteria nin(Object... o) // 不在数组里面 public Criteria nin(Collection<?> o) // 不在集合里面 public Criteria mod(Number value, Number remainder) // 取模 第二个参数量模的值 public Criteria size(int s) ///////////// public Criteria exists(boolean b) // 匹配包含该字段的文档 public Criteria type(int t) // 指定字符类型 public Criteria regex(String re) // 正则规则 public Criteria regex(Pattern pattern) public Criteria near(Point point) // 距离操作 public Criteria nearSphere(Point point) public Criteria maxDistance(double maxDistance) public Criteria minDistance(double minDistance) orOperator() // 或者一个Criteria操作 public Criteria norOperator(Criteria... criteria) //指定一个至少包含两个表达式的数组,选择出都不满足该数组中所有表达式的文档。 andOperator() // 与一个Criteria操作
Query的操作词
public Query skip(long skip) public Query limit(int limit)
单条件查询
Query query = new Query(Criteria.where("id").lt(10));
List<User> users = mongoTemplate.find(query, User.class, "user"); // user 是collection
System.out.println(users); - 更新
Update
public static Update update(String key, Object value) // 静态调用
public Update set(String key, Object value) // 修改并设置值
public Update setOnInsert(String key, Object value) // 如何更新字段不存在则设置,如果更新字段存在则不设置
public Update unset(String key) // 删除存在的字段 key
public Update inc(String key, Number inc) // 自增字段数值
public void inc(String key) // 自增字段数值
-- 针对数组的操作 --
public Update push(String key, Object value) // 操作的是一个数组,有重复也会添加进去
public Update addToSet(String key, Object value) // 操作的是一个数组,有重复数据不会添加进去
public Update pop(String key, Update.Position pos) // 弹出数据,并删除,pos有两个Enum数据,Update.Position.FIRST、Updatea.Position.LAST
public Update pull(String key, Object value) // 删除数组中的数据
public Update pullAll(String key, Object[] values) // 批量删除数组中的数据
-- 其他操作 --
public Update rename(String oldName, String newName) // 重新命名
public Update currentDate(String key) // 更新成当前时间
public Update currentTimestamp(String key) //当前时间截
public Update multiply(String key, Number multiplier) // 乘法运算
public Update max(String key, Object value) // 取最大值保存
public Update min(String key, Object value) //取最小值保存
@Test
void testUpdate() {
Query query = new Query(Criteria.where("_id").is(14));
Update update = new Update();
//update.set("num",1);
//update.setOnInsert("name1", "李四");
//update.unset("name1");
//update.inc("num");
//update.push("name1", Arrays.asList(9,23));
//update.addToSet("name1",Arrays.asList(9,23,12,1212));
//update.pop("name1", Update.Position.FIRST);
//update.pull("name1", Arrays.asList(9,23));
//update.pullAll("name1",new Object[]{Arrays.asList(9,23),Arrays.asList(9,23,12,1212)});
//update.rename("name1","name2");
//update.currentTimestamp("name2");
//update.multiply("num", 2);
//update.min("num", 4);
UpdateResult user = mongoTemplate.updateFirst(query, update, "user");
} 删除
DeleteResult remove(Object) // 移除数据, Object是数据对象,操作的collection是操作对象的数据对象类名的小写 DeleteResult remove(Object, String) // Object是数据对象,collection名称 DeleteResult remove(Query, String) // 查询条件, DeleteResult remove(Query, Class<?>) DeleteResult remove(Query, Class<?>, String)
// 当id是主键时,内容的列名会变成_id,所以查询条件要使用"_id"
Query query = new Query(Criteria.where("name").is("张三1"));
mongoTemplate.remove(query, "user");
分页与排序
Pageable pageable = PageRequest.of(0,50); //分页
// 分页并排序 Sort sort = Sort.by(Sort.Direction.DESC, "_id"); //第二个参数 String... properties Pageable pageable = PageRequest.of(0,50, sort);
// 分页并排序
Sort.Order order = Sort.Order.desc("_id");
Sort sort = Sort.by(order);
Pageable pageable = PageRequest.of(0,50, sort); //条件匹配
ExampleMatcher matcher = ExampleMatcher.matching()
.withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains()); // 匹配规则
// ignoreCase() 忽略大小写
// caseSensitive() 严格大小写
// contains() 包含
// endsWith() 以...结束
// startsWith() 以...开始
// exact() 精确匹配
// storeDefaultMatching() 默认(精确匹配)
// regex() 正则匹配
Example<User> example = Example.of(实体条件, matcher); 完!

京公网安备 11010502036488号