连接数据库
首先创建一个默认的 MongoClient 连接, 后续都会使用这个实例连接 MongoDB
MongoClient mongoClient = new MongoClient();
访问数据库
使用 MongoClient 的 getDatabase() 方法可以获取一个数据库的实例, 指定数据库的名字获取相应的数据库, 如果数据库不存在, 则会自动创建一个数据库.
MongoDatabase database = mongoClient.getDatabase("test");
MongoDatabase 是一个不可变类型.
访问 Collection
获取了 MongoDatabase 实例后, 可以通过起方法 getCollection() 获取相应的 collection 的实例, 指定具体的 collection 名即可获取相应的 Collection, 如果 Collection 不存在, 则会在第一次存储数据的时候创建 collection.
MongoCollection<Document> coll = database.getCollection("myTestCollection");
MongoCollection 同样是不可变类型
创建 Collection
通过方法, createCollection() 可以指定创建一个 Collection, 创建 Collection 的时候可以通过 CreateCollectionOptions 类配置创建 Collection 的配置.
固定 Collection
以下代码创建了一个 1M 大小的固定 Collection
- database.createCollection("cappedCollection",
- new CreateCollectionOptions().capped(true).sizeInBytes(0x100000));
文档校验
MongoDB 可以在更新和插入的时候对文档进行校验. 通过 ValidationOptions 指定校验规则, 例如
- ValidationOptions collOptions = new ValidationOptions().validator(
- Filters.or(Filters.exists("email"), Filters.exists("phone")));
- database.createCollection("contacts",
- new CreateCollectionOptions().validationOptions(collOptions));
获取全部的 Collection
通过方法 listCollectionNames() 可以获取所有 Collection 的名字
- for (String name : database.listCollectionNames()) {
- System.out.println(name);
- }
删除 Collection
通过 drop() 方法来删除一个 collection
- MongoCollection<Document> collection = database.getCollection("contacts");
- collection.drop();
- CodecRegistry
getCollection() 的重载函数运行客户端指定另一个类表示 BSON 文档. 例如, 用户使用 2.x 的 API 的 BasicObject
- // Pass BasicDBObject.class as the second argument
- MongoCollection<BasicDBObject> collection = database.getCollection("mycoll", BasicDBObject.class);
- // insert a document
- BasicDBObject document = new BasicDBObject("x", 1)
- collection.insertOne(document);
- document.append("x", 2).append("y", 3);
- // replace a document
- collection.replaceOne(Filters.eq("_id", document.get("_id")), document);
- // find documents
- List<BasicDBObject> foundDocument = collection.find().into(new ArrayList<BasicDBObject>());
指定类的要求
Codec 必须是 MongoCollection 的 CodecRegistry
Codec 必须编码, 解码整个 BSON 文档
默认的 MongoCollecton 编解码器有
- Doucment
- BasicDBObject
- BsonDocument
应用也可以注册自己的编解码器, 只需要定制 CodecRegistry 接口, 定制的 CodecRegistry 可以在以下三个配置
通过 MongoClientOptions 配置 MongoClient 层
通过 withCodecRegistry 配置 MongoDatabase
通过 withCodecRegistry 配置 MongoCollection
例如, 通过指定 UUID 编解码器替换默认的 UUID 编解码器
- // Replaces the default UuidCodec with one that uses the new standard UUID representation
- CodecRegistry codecRegistry =
- CodecRegistries.fromRegistries(CodecRegistries.fromCodecs(new UuidCodec(UuidRepresentation.STANDARD)),
- MongoClient.getDefaultCodecRegistry());
- // globally
- MongoClientOptions options = MongoClientOptions.builder()
- .codecRegistry(codecRegistry).build();
- MongoClient client = new MongoClient(new ServerAddress(), options);
- // or per database
- MongoDatabase database = client.getDatabase("mydb")
- .withCodecRegistry(codecRegistry);
- // or per collection
- MongoCollection<Document> collection = database.getCollection("mycoll")
- .withCodecRegistry(codecRegistry);
来源: https://juejin.im/entry/5b0659b1f265da0db53bbc42