MongoDB 踩坑记录(可能会持续更新)

栏目: 数据库 · 发布时间: 5年前

内容简介:使用 Hibernate 的时候我们可以利用MongoDB 默认会使用生成的 ObjectId 作为主键 ID:如果想使用自定义的 ID,也可以将

数据校验

使用 Hibernate 的时候我们可以利用 javax.validation 包中提供的一系列 API 对传入数据库的数据进行校验。使用 MongoDB 时,需要显式的在配置当中打开,不然校验不会生效:

@Configuration
public class DataSourceConfig {

    @Bean
    public ValidatingMongoEventListener validatingMongoEventListener() {
        return new ValidatingMongoEventListener(validator());
    }

    @Bean
    public LocalValidatorFactoryBean validator() {
        return new LocalValidatorFactoryBean();
    }
}

索引有关

使用非 ObjectId 作为 Id

MongoDB 默认会使用生成的 ObjectId 作为主键 ID:

@Data
@Document
public class Book {
    @Id
    private String id;
    // ...
}

如果想使用自定义的 ID,也可以将 @Id 加在自定义字段上:

@Data
@Document
public class Book {
    @Id
    private String bookId;
    // ...
}

但注意,这时 bookId 一定要进行初始化操作,不然 MongoDB 仍然会生成一个 ObjectId 作为主键。

同时,主键 @Id 一定是唯一的,因此不需要再使用 @Indexed

联合索引

MySQL 类似,MongoDB 的联合索引(Compound Index)也是按照最左原则进行匹配的。例如下面一个索引:

@Data
@Document
@CompoundIndexes({
        @CompoundIndex(name = "code_and_owner_idx", unique = true, def = "{'code': 1, 'ownerId': 1}")
})
public class Book {
    @Id
    private String bookId;

    @NotBlank
    private String code;

    @NotBlank
    private String ownerId;
}

使用 codeownerId 进行查询会 hit 到索引,使用 code 查询会 hit 到索引,但使用 ownerId 进行查询则会进行 Document 扫描,当数据量大的时候性能会有非常大的下降。因此在建立联合索引的时候应该特别注意字段的顺序。

事务有关

MongoDB 3.X 并不支持多 Document 的事务。MongoDB 4.0 才开始支持多 Document 的事务。

当在 Spring 使用时,单纯的加入 @Transactional 是不行的,需要显式的在配置当中打开:

@Configuration
public class DataSourceConfig {

    @Bean
    MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
        return new MongoTransactionManager(dbFactory);
    }
}

MongoDB 4.0 的事务支持并不支持单机(Standalone)部署,因此如果使用本地开发的单机 MongoDB,加上 @Transactional 进行操作,会直接导致崩溃(MongoDrive 3.8.2)。

同时 MongoDB 4.0 不支持在分片(Sharding)部署上使用,对分片的支持计划 4.2 才推出。考虑到大部分公司使用的还是 3.X 的版本,因此 MongoDB 现在的事务支持基本是不可用的。设计 Mongo 文档格式的时候,应考虑尽量减少多文档事务的操作,

参考资料


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C和指针

C和指针

Kenneth A.Reek / 徐波 / 人民邮电出版社 / 2008 年4月 / 65.00元

本书提供与C语言编程相关的全面资源和深入讨论。本书通过对指针的基础知识和高级特性的探讨,帮助程序员把指针的强大功能融入到自己的程序中去。 全书共18章,覆盖了数据、语句、操作符和表达式、指针、函数、数组、字符串、结构和联合等几乎所有重要的C编程话题。书中给出了很多编程技巧和提示,每章后面有针对性很强的练习,附录部分则给出了部分练习的解答。 本书适合C语言初学者和初级C程序员阅读,也可作......一起来看看 《C和指针》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具