1. 程式人生 > >Java 操作MongoDb 增刪改查

Java 操作MongoDb 增刪改查

注:此文基於mongoDb API 3.2.0進行的測試。

測試程式碼如下:

pom.xml檔案

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>mongo</groupId>
    <artifactId>mongodb</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>mongodb</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.2.0</version>
        </dependency>

    </dependencies>
</project>
MongoDb API 類:
package mongo.mongodb;

import java.util.ArrayList;
import java.util.List;

import org.bson.Document;
import org.bson.conversions.Bson;

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.result.UpdateResult;

public class MongoDb {
    private static MongoCollection<Document> collection;

    /**
     * 連結資料庫
     * 
     * @param databaseName
     *            資料庫名稱
     * @param collectionName
     *            集合名稱
     * @param hostName
     *            主機名
     * @param port
     *            埠號
     */
    public static void connect(String databaseName, String collectionName,
            String hostName, int port) {
        @SuppressWarnings("resource")
        MongoClient client = new MongoClient(hostName, port);
        MongoDatabase db = client.getDatabase(databaseName);
        collection = db.getCollection(collectionName);
        System.out.println(collection);
    }

    /**
     * 插入一個文件
     * 
     * @param document
     *            文件
     */
    public static void insert(Document document) {
        collection.insertOne(document);
    }

    /**
     * 查詢所有文件
     * 
     * @return 所有文件集合
     */
    public static List<Document> findAll() {
        List<Document> results = new ArrayList<Document>();
        FindIterable<Document> iterables = collection.find();
        MongoCursor<Document> cursor = iterables.iterator();
        while (cursor.hasNext()) {
            results.add(cursor.next());
        }

        return results;
    }

    /**
     * 根據條件查詢
     * 
     * @param filter
     *            查詢條件 //注意Bson的幾個實現類,BasicDBObject, BsonDocument,
     *            BsonDocumentWrapper, CommandResult, Document, RawBsonDocument
     * @return 返回集合列表
     */
    public static List<Document> findBy(Bson filter) {
        List<Document> results = new ArrayList<Document>();
        FindIterable<Document> iterables = collection.find(filter);
        MongoCursor<Document> cursor = iterables.iterator();
        while (cursor.hasNext()) {
            results.add(cursor.next());
        }

        return results;
    }

    /**
     * 更新查詢到的第一個
     * 
     * @param filter
     *            查詢條件
     * @param update
     *            更新文件
     * @return 更新結果
     */
    public static UpdateResult updateOne(Bson filter, Bson update) {
        UpdateResult result = collection.updateOne(filter, update);

        return result;
    }

    /**
     * 更新查詢到的所有的文件
     * 
     * @param filter
     *            查詢條件
     * @param update
     *            更新文件
     * @return 更新結果
     */
    public static UpdateResult updateMany(Bson filter, Bson update) {
        UpdateResult result = collection.updateMany(filter, update);

        return result;
    }

    /**
     * 更新一個文件, 結果是replacement是新文件,老文件完全被替換
     * 
     * @param filter
     *            查詢條件
     * @param replacement
     *            跟新文件
     */
    public static void replace(Bson filter, Document replacement) {
        collection.replaceOne(filter, replacement);
    }

    /**
     * 根據條件刪除一個文件
     * 
     * @param filter
     *            查詢條件
     */
    public static void deleteOne(Bson filter) {
        collection.deleteOne(filter);
    }

    /**
     * 根據條件刪除多個文件
     * 
     * @param filter
     *            查詢條件
     */
    public static void deleteMany(Bson filter) {
        collection.deleteMany(filter);
    }
}

測試類:
package mongo.mongodb;

import java.util.List;

import org.bson.Document;
import org.junit.Before;
import org.junit.Test;

import com.mongodb.client.result.UpdateResult;

public class MongoTest 
{
    @Before
    public void before(){
        MongoDb.connect("test", "darren", "172.16.155.151", 27017);
    }
    
    @Test
    public void testInsert(){
        Document document = new Document();
        document.append("name", "wang").append("gender", "female");
        MongoDb.insert(document);
    }
    
    @Test
    public void testFindAll(){
        List<Document> results = MongoDb.findAll();
        for(Document doc : results){
            System.out.println(doc.toJson());
        }
    }
    
    @Test
    public void testFindBy(){
        Document filter = new Document();
        filter.append("name", "li si");
        List<Document> results = MongoDb.findBy(filter);
        for(Document doc : results){
            System.out.println(doc.toJson());
        }
    }
    
    @Test
    public void testUpdateOne(){
        Document filter = new Document();
        filter.append("gender", "male");
        
        //注意update文件裡要包含"$set"欄位
        Document update = new Document();
        update.append("$set", new Document("gender", "female"));
        UpdateResult result = MongoDb.updateOne(filter, update);
        System.out.println("matched count = " + result.getMatchedCount());
    }
    
    @Test
    public void testUpdateMany(){
        Document filter = new Document();
        filter.append("gender", "female");
        
        //注意update文件裡要包含"$set"欄位
        Document update = new Document();
        update.append("$set", new Document("gender", "male"));
        UpdateResult result = MongoDb.updateMany(filter, update);
        System.out.println("matched count = " + result.getMatchedCount());
    }
    
    @Test
    public void testReplace(){
        Document filter = new Document();
        filter.append("name", "zhang");
        
        //注意:更新文件時,不需要使用"$set"
        Document replacement = new Document();
        replacement.append("value", 123);
        MongoDb.replace(filter, replacement);
    }
    
    @Test
    public void testDeleteOne(){
        Document filter = new Document();
        filter.append("name", "li");
        MongoDb.deleteOne(filter);
    }
    
    @Test
    public void testDeleteMany(){
        Document filter = new Document();
        filter.append("gender", "male");
        MongoDb.deleteMany(filter);
    }
}


官方幫助文件:https://docs.mongodb.org/getting-started/java/