MongoDB

MongoDB基本使用

Pom.xml
<!--MongoDB 非Spring boot 项目使用-->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>3.0.6.RELEASE</version>
</dependency>

<!--MongoDB Spring boot 项目使用-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
Annotation
  1. @Document
    – collection: 指定被操作的集合名称
    1.1Eg: @Document(collection = “ap_user_search”)
  2. @Id: 声明当前pojo成员属性为主键, 若不赋值, 则MongoDB自动生成UUID
  3. @Field
    – value: 指定pojo成员属性对应MongoDB中的字段名, 与MyBatis Plus中的@Field用法一致
    3.1 Eg: @Field(“user_id”)
yaml
spring:
  # MongoDB 连接参数 
  data:
    mongodb:
      host: 39.108.135.173
      port: 27017
      database: leadnews-search
Api 及 Class
  1. Class:
    – public class MongoTemplate implements MongoOperations, ApplicationContextAware, IndexOperationsProvider
    1.1 用于调用CRUD方法的类
    – public class Query
    1.2 条件类
    – public class PageRequest extends AbstractPageRequest
    1.3 分页查询的类
    – public class Sort implements Streamable<Sort.Order>, Serializable
    1.4 排序查询的类
    – public static enum Direction: 指定排序类型的常量类
  2. Api
    – public T insert(T objectToSave): 新增操作
    – public T save(T objectToSave): 新增 / 修改 操作
    – public static Query query(CriteriaDefinition criteriaDefinition): 定义条件
    – public class Criteria implements CriteriaDefinition: 配合query使用
    – public static Criteria where(String key): 设定指定查询的字段
    – public Criteria is(@Nullable Object value): 指定一个值, 配合where使用
    – public DeleteResult remove(Query query, Class<?> entityClass): 根据query条件删除
    – public abstract long getDeletedCount(): 获取删除数据的条目
    – public List find(Query query, Class entityClass): 根据query条件查询, 结果是一个List集合
    – public T findOne(Query query, Class entityClass): 根据query条件查询, 结果是一个对象
    – public T findById(Object id, Class entityClass): 根据Id查询, 结果是一个List集合
    – public Criteria and(String key): 指定一个查询的字段, 并连接其它条件
    – public Criteria regex(String regex): 模糊查询, 类似于like, 需要使用正则表达式作为模糊条件
    – public Query limit(int limit): 指定查询的结果数据条目数, page默认为0, 第一页
    – public Query with(Pageable pageable): 分页查询 或 排序查询必须使用到的方法
    – public static PageRequest of(int page, int size): 分页查询, page从0开始, 页码要减1
    – public static Sort by(Sort.Direction direction, String… properties): 根据指定的排序方式与字段作排序
Eg

新增

/**
 * 新增
 * @author 梦欣
 */
@Test
public void mongodbInsertTest(){
    for (int i = 0; i < 7; i++) {
        ApUserSearch apUserSearch = new ApUserSearch();
        apUserSearch.setUserId(3);
        apUserSearch.setKeyword("MengXin" + DateTime.now().getMillis());
        apUserSearch.setCreatedTime(DateTime.now().toDate());
        // 存入到MongoDB中
        mongoTemplate.save(apUserSearch);
        log.info("新增结果: {}", apUserSearch);
    }
}

修改

/**
 * 修改
 * @author 梦欣
 */
@Test
public void mongodbUpdateTest(){
    ApUserSearch apUserSearch = new ApUserSearch();
    apUserSearch.setId("631f191059f48d416e285240");
    apUserSearch.setUserId(3);
    apUserSearch.setKeyword("执行了修改" + DateTime.now().getMillis());
    apUserSearch.setCreatedTime(DateTime.now().toDate());
    mongoTemplate.save(apUserSearch);
}

删除

/**
 * 删除
 * @author 梦欣
 */
@Test
public void mongodbRemoveTest(){
    Query query = Query.query(Criteria.where("userId").is(3));
    // remove: 根据条件删除指定集合中的数据
    DeleteResult remove = mongoTemplate.remove(query, ApUserSearch.class);
    // getDeletedCount: 删除的条目数量
    log.info("删除userId 为 3 的结果: {}", remove.getDeletedCount());
}

条件查询

/**
 * 根据UserId查询
 * @author 梦欣
 */
@Test
public void mongodbFindTest(){
    Query query = Query.query(Criteria.where("userId").is(3));
    // find 查询的结果是一个集合, findOne 查询的结果是一个对象
    List<ApUserSearch> apUserSearch = mongoTemplate.find(query, ApUserSearch.class);
    log.info("查询UserId 为 3 的结果: {}", apUserSearch);
}

/**
 * userId=9 且 keyword以"Xu"开头的记录
 */
@Test
public void mongodbQueryTest(){
    // 设定条件: userId = 7 而且 keyword 以 Xu 开头
    /*
     *   .   任意字符
     *   \d  数字
     *   [a-z]  小写字母
     *   [A-Z]   大写字母
     *   +     1个或多个
     *   *      0个或多个
     *   ?      0或1个
     *   {5}    5个
     *   {3,5}  3-5个
     *   ^   以开头
     *   $   以结束
     */
    Query query = Query.query(Criteria.where("userId").is(9).and("keyword").regex("^Xu.*"));
    List<ApUserSearch> apUserSearches = mongoTemplate.find(query, ApUserSearch.class);
    log.info("userId=9 且 keyword以\"Xu\"开头的记录: {}", apUserSearches);
}

/**
 * 分页查询
 * @author 梦欣
 */
@Test
public void mongodbLimitTestOne(){
    Query query = Query.query(Criteria.where("userId").is(7).and("keyword").regex(".*Meng.*"));
    query.limit(7);
    List<ApUserSearch> apUserSearches = mongoTemplate.find(query, ApUserSearch.class);
    log.info("查询userId为7, 且keyword中包含Meng的结果, 只显示7条: {}",apUserSearches);
}

/**
 * 翻页查询
 * @author 梦欣
 */
@Test
public void mongodbLimitTestTwo(){
    Query query = Query.query(Criteria.where("userId").in(3,7,9).and("keyword").regex(".*1.*"));
    int page = 3;
    int size = 7;
    // page从0开始, 从第三页开始查询, 展示7条数据
    query.with(PageRequest.of(page - 1,size));
    List<ApUserSearch> apUserSearches = mongoTemplate.find(query, ApUserSearch.class);
    log.info("查询userId为3,7,9, 且keyword中包含1的结果, 从第三页开始查询, 展示7条数据: {}",apUserSearches);
}

/**
 * 排序
 * @author 梦欣
 */
@Test
public void mongodbOrderTest(){
    Query query = Query.query(Criteria.where("userId").in(3,7,9));
    query.with(Sort.by(Sort.Direction.DESC,"createdTime"));
    List<ApUserSearch> apUserSearches = mongoTemplate.find(query,ApUserSearch.class);
    for (int i = 0; i < apUserSearches.size(); i++) {
        log.info("时间倒序结果 {} :{}", i + 1, apUserSearches.get(i));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherish Xin And Meng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值