阅读 337

MongoDB Java 教程 - 数据库和Collection

原文链接: www.codemore.top
连接数据库

首先创建一个默认的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);复制代码
文章分类
后端
文章标签