JAVA中使用MongoDB+GirdFS

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最佳应用概述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值