Skip to content

MongoDB Java 集成

MongoDB 提供了 Java 驱动程序,允许我们在 Java 应用程序中与 MongoDB 进行交互。通过 Java 驱动程序,我们可以执行各种操作,如插入、查询、更新和删除数据等。

基本概念

Java 驱动程序的类型

  1. MongoDB Java Driver: 官方提供的 Java 驱动程序。
  2. Spring Data MongoDB: 基于 MongoDB Java Driver 的封装,提供了更高级的 API。

在本章节中,我们将使用官方提供的 Java 驱动程序。

连接到 MongoDB

要连接到 MongoDB,我们需要使用 MongoClient 类。

java
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;

public class MongoDBConnection {
    public static void main(String[] args) {
        // 连接到 MongoDB 服务器
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            // 获取数据库
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            
            System.out.println("Connected to database successfully");
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}

插入数据

插入单个文档

java
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;

public class MongoDBInsert {
    public static void main(String[] args) {
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            MongoCollection<Document> collection = database.getCollection("mycollection");
            
            // 创建文档
            Document document = new Document("name", "John")
                    .append("age", 30)
                    .append("email", "john@example.com")
                    .append("status", "active");
            
            // 插入文档
            collection.insertOne(document);
            
            System.out.println("Document inserted successfully");
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}

插入多个文档

java
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
import java.util.ArrayList;
import java.util.List;

public class MongoDBInsertMany {
    public static void main(String[] args) {
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            MongoCollection<Document> collection = database.getCollection("mycollection");
            
            // 创建文档列表
            List<Document> documents = new ArrayList<>();
            documents.add(new Document("name", "Jane")
                    .append("age", 25)
                    .append("email", "jane@example.com")
                    .append("status", "pending"));
            documents.add(new Document("name", "Bob")
                    .append("age", 35)
                    .append("email", "bob@example.com")
                    .append("status", "inactive"));
            
            // 插入文档列表
            collection.insertMany(documents);
            
            System.out.println("Documents inserted successfully");
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}

查询数据

查询所有文档

java
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.FindIterable;
import org.bson.Document;

public class MongoDBQuery {
    public static void main(String[] args) {
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            MongoCollection<Document> collection = database.getCollection("mycollection");
            
            // 查询所有文档
            FindIterable<Document> documents = collection.find();
            
            // 遍历结果
            for (Document document : documents) {
                System.out.println(document);
            }
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}

查询特定文档

java
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.FindIterable;
import org.bson.Document;

public class MongoDBQuerySpecific {
    public static void main(String[] args) {
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            MongoCollection<Document> collection = database.getCollection("mycollection");
            
            // 查询特定文档
            Document query = new Document("name", "John");
            FindIterable<Document> documents = collection.find(query);
            
            // 遍历结果
            for (Document document : documents) {
                System.out.println(document);
            }
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}

更新数据

更新单个文档

java
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;

public class MongoDBUpdate {
    public static void main(String[] args) {
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            MongoCollection<Document> collection = database.getCollection("mycollection");
            
            // 更新单个文档
            collection.updateOne(
                    Filters.eq("name", "John"),
                    Updates.set("age", 31)
            );
            
            System.out.println("Document updated successfully");
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}

更新多个文档

java
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;

public class MongoDBUpdateMany {
    public static void main(String[] args) {
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            MongoCollection<Document> collection = database.getCollection("mycollection");
            
            // 更新多个文档
            collection.updateMany(
                    Filters.eq("status", "active"),
                    Updates.set("status", "pending")
            );
            
            System.out.println("Documents updated successfully");
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}

删除数据

删除单个文档

java
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
import com.mongodb.client.model.Filters;

public class MongoDBDelete {
    public static void main(String[] args) {
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            MongoCollection<Document> collection = database.getCollection("mycollection");
            
            // 删除单个文档
            collection.deleteOne(Filters.eq("name", "Bob"));
            
            System.out.println("Document deleted successfully");
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}

删除多个文档

java
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
import com.mongodb.client.model.Filters;

public class MongoDBDeleteMany {
    public static void main(String[] args) {
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            MongoCollection<Document> collection = database.getCollection("mycollection");
            
            // 删除多个文档
            collection.deleteMany(Filters.eq("status", "pending"));
            
            System.out.println("Documents deleted successfully");
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}

查询进阶

使用查询操作符

java
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.FindIterable;
import org.bson.Document;
import com.mongodb.client.model.Filters;

public class MongoDBQueryOperators {
    public static void main(String[] args) {
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            MongoCollection<Document> collection = database.getCollection("mycollection");
            
            // 使用查询操作符
            FindIterable<Document> documents = collection.find(
                    Filters.and(
                            Filters.gt("age", 25),
                            Filters.eq("status", "active")
                    )
            );
            
            // 遍历结果
            for (Document document : documents) {
                System.out.println(document);
            }
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}

排序和分页

java
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.FindIterable;
import org.bson.Document;
import com.mongodb.client.model.Sorts;

public class MongoDBQuerySort {
    public static void main(String[] args) {
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            MongoDatabase database = mongoClient.getDatabase("mydatabase");
            MongoCollection<Document> collection = database.getCollection("mycollection");
            
            // 排序和分页
            FindIterable<Document> documents = collection.find()
                    .sort(Sorts.descending("age"))
                    .skip(1)
                    .limit(2);
            
            // 遍历结果
            for (Document document : documents) {
                System.out.println(document);
            }
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}

总结

MongoDB Java 驱动程序允许我们在 Java 应用程序中与 MongoDB 进行交互。通过 Java 驱动程序,我们可以执行各种操作,如插入、查询、更新和删除数据等。在使用 Java 驱动程序时,我们应该注意连接管理、数据处理和错误处理等方面的问题,以确保应用程序的高效运行。