java 对MongoDB的批量操作,以及使用GirdFS对大文件的存储。
jar包引用
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.2</version>
</dependency>
基础操作
package mongo;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
@RunWith(SpringRunner.class)
//@SpringBootTest
public class Client {
@MockBean
MongoCollection<Document> collection;
@Before
public void setUp() {
collection = MongoDBUtil.getConnect().getCollection("user");
}
/**
* 新增一条数据
*/
@Test
public void insertOne() {
// MongoCollection<Document> collection = MongoDBUtil.getConnect().getCollection("user");
Document document = new Document("name", "张三")
.append("sex", "男")
.append("age", 18);
collection.insertOne(document);
}
/**
* 批量删除
*/
@Test
public void deleteMany() {
collection.deleteMany(Filters.all("age", 18));
}
/**
* 批量插入
*/
@Test
public void insertMany() {
List<Document> list = new ArrayList<>();
for (int i = 1; i <= 3; i++) {
Document document = new Document("name", "张三")
.append("sex", "男")
.append("age", 18);
list.add(document);
}
collection.insertMany(list);
}
/**
* 更新一个
*/
@Test
public void updateOne() {
Document document = new Document("$set", new Document("age", 100));
collection.updateOne(Filters.eq("name", "张三"), document);
}
/**
* 更新多个
*/
@Test
public void updateMany() {
Document document = new Document("$set", new Document("age", 100));
collection.updateMany(Filters.eq("name", "张三"), document);
}
/**
* 查找
*/
@Test
public void find() {
FindIterable findIterable = collection.find();
MongoCursor cursor = findIterable.iterator();
while (cursor.hasNext()) {
Document document = (Document) cursor.next();
System.out.println(document.get("name"));
// System.out.println(cursor.next());
}
}
}
GridFS 文件操作
package mongo;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSInputFile;
import org.bson.Document;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
@RunWith(SpringRunner.class)
//@SpringBootTest
public class ClientGirdFS {
@MockBean
GridFS fs;
MongoCollection<Document> collection;
@Before
public void setUp() {
MongoClient mongoClient = new MongoClient("192.168.0.189", 27017);
//连接到数据库
DB db = mongoClient.getDB("leo");
fs = new GridFS(db);
collection = MongoDBUtil.getConnect().getCollection("fs.files");
}
/**
* mongofiles put xxx.txt
* 上传文件
*
* @throws IOException
*/
@Test
public void put() throws IOException {
File file = new File("d:\\zookeeper-3.4.10.tar.gz");
GridFSInputFile gfFile = fs.createFile(file);
gfFile.save();
}
/**
* mongofiles get xxx.txt
* 下载文件
*
* @throws IOException
*/
@Test
public void get() throws IOException {
File file = new File("d:\\zookeeper-3.4.10_down.tar.gz");
FileOutputStream os = new FileOutputStream(file);
//获得文件流
InputStream is = fs.findOne(new BasicDBObject("filename", "zookeeper-3.4.10.tar.gz")).getInputStream();
//下载
byte[] bytes = new byte[1024];
while (is.read(bytes) > 0) {
os.write(bytes);
}
os.flush();
os.close();
}
/**
* mongofiles list xx.txt
* 查看文件
*/
@Test
public void list(){
FindIterable findIterable = collection.find();
MongoCursor cursor = findIterable.iterator();
while (cursor.hasNext()) {
Document document = (Document) cursor.next();
System.out.println(document.get("filename"));
}
}
/**
* mongofiles delete xxx.txt
* 删除文件
*/
@Test
public void delete(){
fs.remove("zookeeper-3.4.10.tar.gz");
}
}
MongoDBUtil.java
package mongo;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;
import java.util.ArrayList;
import java.util.List;
public class MongoDBUtil {
//不通过认证获取连接数据库对象
public static MongoDatabase getConnect() {
//连接到 mongodb 服务
MongoClient mongoClient = new MongoClient("192.168.0.189", 27017);
//连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("leo");
//返回连接数据库对象
return mongoDatabase;
}
//需要密码认证方式连接
public static MongoDatabase getConnect2() {
List<ServerAddress> adds = new ArrayList<>();
//ServerAddress()两个参数分别为 服务器地址 和 端口
ServerAddress serverAddress = new ServerAddress("localhost", 27017);
adds.add(serverAddress);
List<MongoCredential> credentials = new ArrayList<>();
//MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());
credentials.add(mongoCredential);
//通过连接认证获取MongoDB连接
MongoClient mongoClient = new MongoClient(adds, credentials);
//连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
//返回连接数据库对象
return mongoDatabase;
}
}
推荐阅读
MongoDB GridFS最佳应用概述