blog-web/source/_posts/MongoDB/5.0、Java操作MongoDB数据库.md
结发受长生 a29cff3aed 笔记迁移
2018-05-12 19:51:10 +08:00

81 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 5.0、Java操作MongoDB数据库
date: 2018-5-12 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创建