81 lines
2.7 KiB
Markdown
81 lines
2.7 KiB
Markdown
---
|
||
title: 5.0、Java操作MongoDB数据库
|
||
date: 2018-1-26 19:26:45
|
||
tags:
|
||
- 数据库
|
||
- MongoDB
|
||
categories:
|
||
- MongoDB
|
||
---
|
||
|
||
所需要的[驱动jar包](http://mvnrepository.com/artifact/org.mongodb/mongo-java-driver)
|
||
|
||
<!-- more -->
|
||
#### (一) 连接MongoDB
|
||
一个`MongoClient`的实例代表一个客户端连接
|
||
从中可以获取到需要使用的数据库`MongoDatabase`对象
|
||
```java
|
||
MongoClient client = new MongoClient("localhost",27017);
|
||
MongoDatabase db = client.getDatabase("demo");
|
||
|
||
// 使用完毕后, 需要关闭客户端连接
|
||
client.close();
|
||
```
|
||
|
||
MongoClient是**线程安全**的,可以在多程程环境中共享同一个MongoClient。通常来说,一个应用程序中,只需要生成一个全局的MongoClient实例
|
||
|
||
#### (二) 认证
|
||
上述方式是在数据库没有添加用户认证的情况下实现的连接
|
||
认证信息用`MongoCredential`对象表示
|
||
```java
|
||
ServerAddress address = new ServerAddress("localhost", 27017);
|
||
// 参数分别是 用户名 所在数据库 密码(char数组形式)
|
||
MongoCredential credential = MongoCredential.createCredential("sookie", "demo", "123456".toCharArray());
|
||
|
||
// 由于构造函数接受一个List对象, 所以需要进行一次包装
|
||
MongoClient client = new MongoClient(address, Arrays.asList(credential));
|
||
|
||
client.close();
|
||
```
|
||
#### (三) 获取一个集合
|
||
```java
|
||
MongoDatabase db = client.getDatabase("demo");
|
||
//获取指定名称的集合
|
||
MongoCollection<Document> collection = db.getCollection("test");
|
||
```
|
||
在集合对象上就可以直接进行增删改查的操作
|
||
|
||
#### (四) 数据对象
|
||
或者也可以称为文档 , 本身是一个JSON
|
||
使用`Document`对象来表示
|
||
任何需要JSON的地方都通用这个对象( 包括数据的查询结果 )
|
||
|
||
#### (五) 插入与删除
|
||
Document中的静态方法parse可以将JSON字符串转化为Document对象 , 用于插入方法的参数
|
||
```java
|
||
Person person = new Person("Sookie",18);
|
||
Document doc = Document.parse(JSON.toJSONString(person));
|
||
collection.insertOne(doc);
|
||
```
|
||
insert相关的方法也可以接受Map对象等作为参数 , 具体的参考源码
|
||
|
||
删除使用`deleteOne`和`deleteMany`方法
|
||
前者表示删除符合条件的一条数据 , 后者表示删除符合条件的多条数据
|
||
|
||
```java
|
||
Bson filter = new BasicDBObject("age",18);
|
||
collection.deleteMany(filter);
|
||
```
|
||
> `Bson`是一个接口 , `BasicDBObject`是这个接口的一个实现类 , 可以作为查询条件
|
||
|
||
#### (六) 查询
|
||
```java
|
||
// 执行查询操作, 方法名称与终端所用的指令类似
|
||
FindIterable<Document> result = collection.find();
|
||
for (Document doc : result) {
|
||
System.out.println(doc);
|
||
}
|
||
```
|
||
find函数也有Bson作为参数的重载形式 , 查询条件的创建方式同上面的删除操作
|
||
包含$操作符的查询条件同样可以使用BasicDBObject创建
|