最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java操作MongoDB完整API使用的實(shí)戰(zhàn)指南

 更新時(shí)間:2026年06月10日 08:22:17   作者:WL_Aurora  
本文詳細(xì)介紹了使用MongoDB Java驅(qū)動(mongo-java-driver)進(jìn)行數(shù)據(jù)庫操作的方法,涵蓋集合操作、文檔CRUD、查詢、投影、排序、分頁查詢及聚合查詢等并提供了完整的代碼示例和性能優(yōu)化建議,需要的朋友可以參考下

一、前言

在之前的文章中,我們掌握了MongoDB的Shell命令行操作和文檔關(guān)系建模。但在實(shí)際企業(yè)開發(fā)中,90%的場景是通過編程語言驅(qū)動來操作數(shù)據(jù)庫。Java作為后端開發(fā)的主流語言,其MongoDB官方驅(qū)動(mongo-java-driver)提供了完整的CRUD、聚合、索引管理等功能。

本文將基于 MongoDB Java Driver 3.12.7,從零搭建Maven工程,完整演示連接數(shù)據(jù)庫、操作集合、文檔CRUD、條件查詢、投影排序等核心API。所有代碼均經(jīng)過實(shí)測,可直接復(fù)制到項(xiàng)目中使用。

二、環(huán)境搭建

2.1 創(chuàng)建Maven工程

pom.xml 中添加依賴:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.12.7</version>
</dependency>

版本說明:3.12.x 是MongoDB 3.x/4.x的兼容版本,生產(chǎn)環(huán)境穩(wěn)定可靠。若使用MongoDB 4.4+,可升級至 4.x 驅(qū)動。

2.2 連接MongoDB

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

public class MongoDBConnectionDemo {
    public static void main(String[] args) {
        // 方式一:簡單連接(本地?zé)o認(rèn)證)
        MongoClient mongoClient = MongoClients.create("mongodb://127.0.0.1:27017");

        // 方式二:帶認(rèn)證連接(生產(chǎn)環(huán)境必用)
        // MongoClient mongoClient = MongoClients.create(
        //     "mongodb://username:password@host:27017/?authSource=admin"
        // );

        // 獲取數(shù)據(jù)庫(不存在則自動創(chuàng)建,首次寫入時(shí)持久化)
        MongoDatabase database = mongoClient.getDatabase("test");

        // 獲取集合(不存在則自動創(chuàng)建,首次寫入時(shí)持久化)
        MongoCollection<Document> collection = database.getCollection("teachers");

        // 測試連接:獲取第一個文檔并打印JSON
        Document firstDoc = collection.find().first();
        if (firstDoc != null) {
            System.out.println("連接成功,首個文檔:" + firstDoc.toJson());
        } else {
            System.out.println("集合為空,連接成功");
        }

        // 關(guān)閉客戶端(釋放連接池資源)
        mongoClient.close();
    }
}

重要提示MongoClients.create() 內(nèi)部自帶連接池管理,默認(rèn)最大連接數(shù)100,無需手動維護(hù)連接池。務(wù)必在應(yīng)用關(guān)閉時(shí)調(diào)用 mongoClient.close()。

三、集合操作API

集合是MongoDB中存儲文檔的容器,類似于MySQL中的表。Java驅(qū)動提供了豐富的集合管理API。

3.1 創(chuàng)建普通集合

import com.mongodb.client.MongoDatabase;

/**
 * 創(chuàng)建普通集合(無大小限制,無校驗(yàn)規(guī)則)
 * @param database MongoDatabase實(shí)例
 * @param name 集合名稱
 */
public void createCollection(MongoDatabase database, String name) {
    database.createCollection(name);
    System.out.println("集合 '" + name + "' 創(chuàng)建成功");
}

3.2 創(chuàng)建固定大小集合(Capped Collection)

固定大小集合適用于日志、緩存等場景,達(dá)到上限后自動覆蓋最舊數(shù)據(jù)。

import com.mongodb.client.model.CreateCollectionOptions;

/**
 * 創(chuàng)建固定大小的集合(Capped Collection)
 * @param database MongoDatabase實(shí)例
 * @param name 集合名稱
 * @param sizeBytes 集合最大大?。ㄗ止?jié))
 */
public void createCappedCollection(MongoDatabase database, String name, long sizeBytes) {
    CreateCollectionOptions options = new CreateCollectionOptions()
        .capped(true)
        .sizeInBytes(sizeBytes);

    database.createCollection(name, options);
    System.out.println("固定大小集合 '" + name + "' 創(chuàng)建成功,大小限制:" + sizeBytes + " bytes");
}

Capped Collection特性

  • 插入順序與查詢順序一致(天然按時(shí)間排序)
  • 達(dá)到size上限后自動刪除最舊文檔
  • 不支持刪除單個文檔,只能整體刪除集合
  • 不支持分片

3.3 創(chuàng)建帶校驗(yàn)規(guī)則的集合(Schema Validation)

MongoDB 3.2+支持在集合層面設(shè)置文檔校驗(yàn)規(guī)則,確保插入的文檔必須包含指定字段。

import com.mongodb.client.model.CreateCollectionOptions;
import com.mongodb.client.model.ValidationOptions;
import com.mongodb.client.model.Filters;

/**
 * 創(chuàng)建帶校驗(yàn)規(guī)則的集合
 * 要求插入的文檔必須包含 field1 或 field2 中的至少一個字段
 * @param database MongoDatabase實(shí)例
 * @param name 集合名稱
 * @param field1 必須存在的字段1
 * @param field2 必須存在的字段2
 */
public void createCollectionWithValidation(
        MongoDatabase database, 
        String name, 
        String field1, 
        String field2) {

    // 設(shè)置校驗(yàn)規(guī)則:文檔必須包含 field1 或 field2
    ValidationOptions validationOptions = new ValidationOptions()
        .validator(Filters.or(
            Filters.exists(field1),
            Filters.exists(field2)
        ))
        .validationLevel(ValidationLevel.STRICT)  // 嚴(yán)格校驗(yàn):所有寫入都校驗(yàn)
        .validationAction(ValidationAction.ERROR);  // 校驗(yàn)失敗時(shí)拋出錯誤

    CreateCollectionOptions options = new CreateCollectionOptions()
        .validationOptions(validationOptions);

    database.createCollection(name, options);
    System.out.println("帶校驗(yàn)集合 '" + name + "' 創(chuàng)建成功,要求包含字段:" + field1 + " 或 " + field2);
}
參數(shù)可選值說明
validationLevelOFF / STRICT / MODERATE校驗(yàn)嚴(yán)格程度
validationActionERROR / WARN校驗(yàn)失敗時(shí)的行為

3.4 獲取與刪除集合

import com.mongodb.client.MongoCollection;
import org.bson.Document;

/**
 * 獲取集合引用
 */
public MongoCollection<Document> getCollection(MongoDatabase database, String name) {
    return database.getCollection(name);
}

/**
 * 刪除集合(危險(xiǎn)操作!數(shù)據(jù)不可恢復(fù))
 */
public void dropCollection(MongoDatabase database, String collectionName) {
    MongoCollection<Document> collection = database.getCollection(collectionName);
    collection.drop();
    System.out.println("集合 '" + collectionName + "' 已刪除");
}

四、文檔CRUD操作

Document是MongoDB的核心數(shù)據(jù)單元,Java中對應(yīng) org.bson.Document 類。Document本質(zhì)是一個 Map<String, Object>,BSON類型與Java類型的映射關(guān)系如下:

BSON類型Java類型示例
StringString"name": "張三"
IntegerInteger"age": 20
DoubleDouble"score": 92.5
BooleanBoolean"isVip": true
DateDate"createTime": new Date()
ObjectIdObjectId"_id": new ObjectId()
ArrayList"tags": Arrays.asList("A", "B")
Embedded DocumentDocument"address": new Document("city", "北京")

4.1 插入單個文檔

import com.mongodb.client.MongoCollection;
import org.bson.Document;
import java.util.Map;

/**
 * 插入單個文檔
 * @param collection 集合引用
 * @param data 鍵值對數(shù)據(jù)
 */
public void insertOne(MongoCollection<Document> collection, Map<String, Object> data) {
    Document doc = new Document();
    for (Map.Entry<String, Object> entry : data.entrySet()) {
        doc.append(entry.getKey(), entry.getValue());
    }
    collection.insertOne(doc);
    System.out.println("單條文檔插入成功,_id: " + doc.getObjectId("_id"));
}

// 使用示例
public static void main(String[] args) {
    MongoCollection<Document> students = database.getCollection("students");

    Map<String, Object> studentData = Map.of(
        "name", "張三",
        "age", 20,
        "major", "計(jì)算機(jī)科學(xué)",
        "score", 88.5,
        "address", new Document("province", "山西").append("city", "太原")
    );

    insertOne(students, studentData);
}

4.2 插入多個文檔

import com.mongodb.client.MongoCollection;
import org.bson.Document;
import java.util.Arrays;
import java.util.List;

/**
 * 批量插入文檔(性能最優(yōu)方案)
 * @param collection 集合引用
 * @param documents 文檔列表
 */
public void insertMany(MongoCollection<Document> collection, List<Document> documents) {
    collection.insertMany(documents);
    System.out.println("批量插入成功,共 " + documents.size() + " 條文檔");
}

// 使用示例
public static void main(String[] args) {
    MongoCollection<Document> students = database.getCollection("students");

    List<Document> docs = Arrays.asList(
        new Document("name", "李四").append("age", 21).append("score", 92.0),
        new Document("name", "王五").append("age", 19).append("score", 85.0),
        new Document("name", "趙六").append("age", 22).append("score", 90.0)
    );

    insertMany(students, docs);
}

性能提示:insertMany 將網(wǎng)絡(luò)往返次數(shù)從N次降到1次,批量插入時(shí)務(wù)必使用此方法。

4.3 修改單個文檔

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.bson.conversions.Bson;

/**
 * 修改單個文檔(updateOne)
 * @param collection 集合引用
 * @param filterField 查詢條件字段
 * @param filterValue 查詢條件值
 * @param updateField 更新字段
 * @param updateValue 更新值
 */
public void updateOne(
        MongoCollection<Document> collection,
        String filterField, Object filterValue,
        String updateField, Object updateValue) {

    // 構(gòu)建查詢條件:Filters.eq 表示等于匹配
    Bson filter = Filters.eq(filterField, filterValue);

    // 構(gòu)建更新操作:$set 修改字段值
    Bson update = Updates.set(updateField, updateValue);

    UpdateResult result = collection.updateOne(filter, update);
    System.out.println("匹配文檔數(shù):" + result.getMatchedCount() + 
                     ",修改文檔數(shù):" + result.getModifiedCount());
}

// 使用示例:將name="張三"的score改為95
demo.updateOne(students, "name", "張三", "score", 95.0);

4.4 修改多個文檔(批量更新)

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;

/**
 * 批量更新:給所有訂單數(shù)量=100的訂單增加100
 */
public void updateManyDemo(MongoCollection<Document> collection) {
    // 查詢條件:order_nums = 100
    Bson filter = Filters.eq("order_nums", 100);

    // 更新操作:$inc 自增100
    Bson update = Updates.inc("order_nums", 100);

    UpdateResult result = collection.updateMany(filter, update);
    System.out.println("批量更新完成,修改文檔數(shù):" + result.getModifiedCount());
}
更新操作符Java API作用
$setUpdates.set(field, value)設(shè)置字段值
$unsetUpdates.unset(field)刪除字段
$incUpdates.inc(field, n)數(shù)值自增n
$mulUpdates.mul(field, n)數(shù)值自乘n
$renameUpdates.rename(oldName, newName)重命名字段
$pushUpdates.push(field, value)數(shù)組追加元素
$addToSetUpdates.addToSet(field, value)數(shù)組去重追加
$pullUpdates.pull(field, value)數(shù)組刪除元素

4.5 刪除文檔

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.result.DeleteResult;
import org.bson.Document;

/**
 * 刪除單個文檔
 */
public void deleteOne(MongoCollection<Document> collection, String field, Object value) {
    DeleteResult result = collection.deleteOne(Filters.eq(field, value));
    System.out.println("刪除文檔數(shù):" + result.getDeletedCount());
}

/**
 * 刪除多個文檔
 */
public void deleteMany(MongoCollection<Document> collection, String field, Object value) {
    DeleteResult result = collection.deleteMany(Filters.eq(field, value));
    System.out.println("批量刪除文檔數(shù):" + result.getDeletedCount());
}

// 使用示例
deleteOne(orders, "order_id", "0003");      // 刪除order_id=0003的訂單
deleteMany(orders, "order_num", 100);       // 刪除所有order_num=100的訂單

五、查詢操作API

5.1 查詢所有文檔(游標(biāo)遍歷)

import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import org.bson.Document;

/**
 * 查詢所有文檔并遍歷輸出
 */
public void findAll(MongoCollection<Document> collection) {
    // 獲取游標(biāo)(Cursor),類似JDBC的ResultSet
    MongoCursor<Document> cursor = collection.find().iterator();

    try {
        while (cursor.hasNext()) {
            Document doc = cursor.next();
            System.out.println(doc.toJson());
        }
    } finally {
        // 必須關(guān)閉游標(biāo),釋放服務(wù)器端資源
        cursor.close();
    }
}

/**
 * 查詢前N條文檔
 */
public void findTopN(MongoCollection<Document> collection, int n) {
    MongoCursor<Document> cursor = collection.find().limit(n).iterator();
    try {
        while (cursor.hasNext()) {
            System.out.println(cursor.next().toJson());
        }
    } finally {
        cursor.close();
    }
}

/**
 * 查詢第一條文檔
 */
public void findFirst(MongoCollection<Document> collection) {
    Document first = collection.find().first();
    if (first != null) {
        System.out.println("第一條:" + first.toJson());
    }
}

5.2 條件查詢(Filters類)

Filters 類提供了鏈?zhǔn)紸PI,支持所有MongoDB查詢操作符:

import com.mongodb.client.MongoCollection;
import com.mongodb.client.FindIterable;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.bson.conversions.Bson;

/**
 * 多條件查詢示例:60 <= score < 80 且 address="山西"
 */
public void complexQuery(MongoCollection<Document> collection) {

    // 方式一:使用原生Document構(gòu)建查詢條件(靈活但冗長)
    FindIterable<Document> docs1 = collection.find(
        new Document("score", new Document("$gte", 60).append("$lt", 80))
            .append("address", "山西")
    );

    // 方式二:使用Filters鏈?zhǔn)紸PI(推薦,代碼可讀性高)
    Bson filter = Filters.and(
        Filters.gte("score", 60),      // score >= 60
        Filters.lt("score", 80),         // score < 80
        Filters.eq("address", "山西")    // address = "山西"
    );

    FindIterable<Document> docs2 = collection.find(filter);

    // 遍歷結(jié)果
    for (Document doc : docs2) {
        System.out.println(doc.toJson());
    }
}
Filters方法對應(yīng)操作符示例
eq(field, value)$eqFilters.eq("name", "張三")
ne(field, value)$neFilters.ne("status", "deleted")
gt(field, value)$gtFilters.gt("score", 80)
gte(field, value)$gteFilters.gte("age", 18)
lt(field, value)$ltFilters.lt("price", 100)
lte(field, value)$lteFilters.lte("stock", 10)
in(field, list)$inFilters.in("status", Arrays.asList("A", "B"))
nin(field, list)$ninFilters.nin("role", Arrays.asList("guest"))
exists(field, true)$existsFilters.exists("email", true)
regex(field, pattern)$regexFilters.regex("name", "^張")
and(filters...)$andFilters.and(cond1, cond2)
or(filters...)$orFilters.or(cond1, cond2)
not(filter)$notFilters.not(Filters.eq("status", "A"))

5.3 投影(Projection)

投影用于控制查詢結(jié)果中返回哪些字段,減少網(wǎng)絡(luò)傳輸量。

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Projections;
import org.bson.Document;
import org.bson.conversions.Bson;

/**
 * 投影查詢:只返回name、sex、age字段,不返回_id
 */
public void projectionQuery(MongoCollection<Document> collection) {

    // 方式一:使用原生Document構(gòu)建投影
    collection.find(Filters.eq("name", "李大喜"))
        .projection(new Document("name", 1)
            .append("sex", 1)
            .append("age", 1)
            .append("_id", 0)  // 0表示不顯示
        );

    // 方式二:使用Projections工具類(推薦)
    Bson projection = Projections.fields(
        Projections.include("name", "sex", "age"),  // 包含這些字段
        Projections.excludeId()                      // 排除_id字段
    );

    collection.find(Filters.eq("name", "李大喜"))
        .projection(projection)
        .forEach(doc -> System.out.println(doc.toJson()));
}
Projections方法作用
include("f1", "f2")只返回指定字段(_id默認(rèn)仍返回)
exclude("f1", "f2")排除指定字段(其余都返回)
excludeId()排除_id字段
fields(include, excludeId)組合使用

投影規(guī)則:不能同時(shí)混用 includeexclude_id 除外)。要么指定要顯示的字段,要么指定要隱藏的字段。

5.4 排序(Sorts類)

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Sorts;
import org.bson.Document;

/**
 * 排序查詢:先按age升序,age相同則按sal升序
 */
public void sortQuery(MongoCollection<Document> collection) {
    collection.find(Filters.lt("age", 50))  // 查詢age < 50的文檔
        .sort(Sorts.ascending("age", "sal"))   // 多字段升序
        .forEach(doc -> System.out.println(doc.toJson()));
}

/**
 * 復(fù)合排序:age降序,sal升序
 */
public void compoundSort(MongoCollection<Document> collection) {
    collection.find()
        .sort(Sorts.orderBy(
            Sorts.descending("age"),   // age 降序
            Sorts.ascending("sal")     // sal 升序
        ))
        .forEach(doc -> System.out.println(doc.toJson()));
}
Sorts方法含義
ascending("f1", "f2")按指定字段升序排列
descending("f1", "f2")按指定字段降序排列
orderBy(sort1, sort2)組合多個排序規(guī)則

六、分頁查詢實(shí)戰(zhàn)

結(jié)合 skip、limit、sort 實(shí)現(xiàn)完整的分頁功能:

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Sorts;
import org.bson.Document;

/**
 * 分頁查詢工具方法
 * @param collection 集合
 * @param pageNum 頁碼(從1開始)
 * @param pageSize 每頁大小
 * @return 當(dāng)前頁文檔列表
 */
public List<Document> paginate(MongoCollection<Document> collection, int pageNum, int pageSize) {
    int skip = (pageNum - 1) * pageSize;

    List<Document> result = new ArrayList<>();
    collection.find()
        .sort(Sorts.descending("createTime"))  // 按時(shí)間倒序
        .skip(skip)                             // 跳過前N條
        .limit(pageSize)                        // 取N條
        .into(result);

    return result;
}

/**
 * 獲取總頁數(shù)
 */
public long getTotalPages(MongoCollection<Document> collection, int pageSize) {
    long total = collection.countDocuments();
    return (total + pageSize - 1) / pageSize;
}

// 使用示例
public static void main(String[] args) {
    MongoCollection<Document> articles = database.getCollection("articles");

    // 查詢第2頁,每頁10條
    List<Document> page2 = paginate(articles, 2, 10);
    page2.forEach(doc -> System.out.println(doc.getString("title")));

    System.out.println("總頁數(shù):" + getTotalPages(articles, 10));
}

性能提示:skip 在大數(shù)據(jù)量時(shí)性能較差(需要掃描跳過的文檔)。生產(chǎn)環(huán)境建議:

  1. 使用范圍分頁:find({createTime: {$lt: lastTime}}).limit(10)
  2. 為排序字段創(chuàng)建索引
  3. 限制最大頁碼(如只允許查詢前100頁)

七、聚合查詢?nèi)腴T

聚合管道是MongoDB最強(qiáng)大的查詢功能,支持 $match、$group、$sort、$project 等階段。

import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Aggregates;
import com.mongodb.client.model.Accumulators;
import com.mongodb.client.model.Filters;
import org.bson.Document;
import org.bson.conversions.Bson;
import java.util.Arrays;
import java.util.List;

/**
 * 聚合查詢:按部門統(tǒng)計(jì)平均工資和人數(shù)
 */
public void aggregateDemo(MongoCollection<Document> collection) {
    List<Bson> pipeline = Arrays.asList(
        // 階段1:匹配條件(類似WHERE)
        Aggregates.match(Filters.gte("sal", 1000)),

        // 階段2:按deptno分組(類似GROUP BY)
        Aggregates.group("$deptno",
            Accumulators.avg("avgSal", "$sal"),      // 平均工資
            Accumulators.sum("count", 1),             // 人數(shù)
            Accumulators.max("maxSal", "$sal")       // 最高工資
        ),

        // 階段3:排序(類似ORDER BY)
        Aggregates.sort(Sorts.descending("avgSal")),

        // 階段4:限制返回?cái)?shù)量(類似LIMIT)
        Aggregates.limit(10)
    );

    collection.aggregate(pipeline)
        .forEach(doc -> System.out.println(doc.toJson()));
}
Aggregates方法對應(yīng)管道階段作用
match(filter)$match過濾文檔
group(id, accumulators)$group分組聚合
sort(order)$sort排序
limit(n)$limit限制數(shù)量
skip(n)$skip跳過數(shù)量
project(fields)$project投影字段
lookup(...)$lookup左外連接(關(guān)聯(lián)查詢)
unwind(field)$unwind展開數(shù)組

八、完整工具類封裝

將上述API封裝為可復(fù)用的工具類:

import com.mongodb.client.*;
import com.mongodb.client.model.*;
import com.mongodb.client.result.*;
import org.bson.Document;
import org.bson.conversions.Bson;
import java.util.*;

public class MongoDBUtil {

    private MongoClient client;
    private MongoDatabase database;

    public MongoDBUtil(String uri, String dbName) {
        this.client = MongoClients.create(uri);
        this.database = client.getDatabase(dbName);
    }

    // ==================== 集合操作 ====================
    public void createCollection(String name) {
        database.createCollection(name);
    }

    public void createCappedCollection(String name, long sizeBytes) {
        database.createCollection(name, 
            new CreateCollectionOptions().capped(true).sizeInBytes(sizeBytes));
    }

    public MongoCollection<Document> getCollection(String name) {
        return database.getCollection(name);
    }

    public void dropCollection(String name) {
        database.getCollection(name).drop();
    }

    // ==================== 文檔操作 ====================
    public void insertOne(String collectionName, Map<String, Object> data) {
        Document doc = new Document(data);
        getCollection(collectionName).insertOne(doc);
    }

    public void insertMany(String collectionName, List<Document> docs) {
        getCollection(collectionName).insertMany(docs);
    }

    public long updateOne(String coll, String field, Object val, 
                         String upField, Object upVal) {
        UpdateResult r = getCollection(coll).updateOne(
            Filters.eq(field, val), 
            Updates.set(upField, upVal)
        );
        return r.getModifiedCount();
    }

    public long updateMany(String coll, Bson filter, Bson update) {
        return getCollection(coll).updateMany(filter, update).getModifiedCount();
    }

    public long deleteOne(String coll, String field, Object val) {
        return getCollection(coll).deleteOne(Filters.eq(field, val)).getDeletedCount();
    }

    public long deleteMany(String coll, Bson filter) {
        return getCollection(coll).deleteMany(filter).getDeletedCount();
    }

    // ==================== 查詢操作 ====================
    public List<Document> findAll(String coll) {
        return getCollection(coll).find().into(new ArrayList<>());
    }

    public List<Document> find(String coll, Bson filter) {
        return getCollection(coll).find(filter).into(new ArrayList<>());
    }

    public List<Document> find(String coll, Bson filter, Bson projection) {
        return getCollection(coll).find(filter).projection(projection).into(new ArrayList<>());
    }

    public List<Document> paginate(String coll, Bson filter, 
                                    String sortField, int pageNum, int pageSize) {
        int skip = (pageNum - 1) * pageSize;
        return getCollection(coll).find(filter)
            .sort(Sorts.descending(sortField))
            .skip(skip).limit(pageSize)
            .into(new ArrayList<>());
    }

    public long count(String coll, Bson filter) {
        return getCollection(coll).countDocuments(filter);
    }

    // ==================== 聚合操作 ====================
    public List<Document> aggregate(String coll, List<Bson> pipeline) {
        return getCollection(coll).aggregate(pipeline).into(new ArrayList<>());
    }

    // ==================== 資源釋放 ====================
    public void close() {
        if (client != null) {
            client.close();
        }
    }
}

總結(jié)

本文系統(tǒng)覆蓋了Java操作MongoDB的核心API:

功能模塊核心類關(guān)鍵方法
連接管理MongoClientscreate(uri)
集合操作MongoDatabasecreateCollection(), getCollection(), drop()
文檔插入MongoCollectioninsertOne(), insertMany()
文檔更新Updatesset(), inc(), unset(), push()
文檔刪除MongoCollectiondeleteOne(), deleteMany()
條件查詢Filterseq(), gt(), lt(), and(), or()
結(jié)果投影Projectionsinclude(), exclude(), excludeId()
結(jié)果排序Sortsascending(), descending(), orderBy()
聚合管道Aggregatesmatch(), group(), sort(), limit()

以上就是Java操作MongoDB完整API使用的實(shí)戰(zhàn)指南的詳細(xì)內(nèi)容,更多關(guān)于Java操作MongoDB API使用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中的異常處理(try,catch,finally,throw,throws)

    Java中的異常處理(try,catch,finally,throw,throws)

    本文主要介紹了Java中的異常處理,文章主要介紹的異常處理包括5個關(guān)鍵字try,catch,finally,throw,throws,更多詳細(xì)內(nèi)容需要的朋友可以參考一下
    2022-06-06
  • mybatis plus 的動態(tài)表名的配置詳解

    mybatis plus 的動態(tài)表名的配置詳解

    這篇文章主要介紹了mybatis plus 的動態(tài)表名的配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java編程打印購物小票實(shí)現(xiàn)代碼

    Java編程打印購物小票實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java編程打印購物小票實(shí)現(xiàn)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • java開發(fā)讀取嵌套jar包中的文件

    java開發(fā)讀取嵌套jar包中的文件

    這篇文章主要為大家介紹了java開發(fā)讀取嵌套jar包中的文件方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 詳解SpringBoot如何使用JWT實(shí)現(xiàn)身份認(rèn)證和授權(quán)

    詳解SpringBoot如何使用JWT實(shí)現(xiàn)身份認(rèn)證和授權(quán)

    JSON?Web?Token(JWT)是一種用于在網(wǎng)絡(luò)應(yīng)用之間安全傳遞信息的開放標(biāo)準(zhǔn),本文主要為大家介紹了如何在Spring?Boot中使用JWT實(shí)現(xiàn)身份認(rèn)證和授權(quán),需要的可以了解下
    2023-10-10
  • Java并發(fā)容器之ConcurrentLinkedQueue詳解

    Java并發(fā)容器之ConcurrentLinkedQueue詳解

    這篇文章主要介紹了Java并發(fā)容器之ConcurrentLinkedQueue詳解,加鎖隊(duì)列的實(shí)現(xiàn)較為簡單,這里就略過,我們來重點(diǎn)來解讀一下非阻塞隊(duì)列,
    從點(diǎn)到面, 下面我們來看下非阻塞隊(duì)列經(jīng)典實(shí)現(xiàn)類ConcurrentLinkedQueue,需要的朋友可以參考下
    2023-12-12
  • SpringCloud?Config之動態(tài)配置管理與高可用治理方式

    SpringCloud?Config之動態(tài)配置管理與高可用治理方式

    這篇文章主要介紹了SpringCloud?Config之動態(tài)配置管理與高可用治理方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair 解決方法總結(jié)

    javax.net.ssl.SSLException: java.lang.RuntimeException: Coul

    這篇文章主要介紹了javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair 解決方法,有需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • 將JavaDoc注釋生成API文檔的操作

    將JavaDoc注釋生成API文檔的操作

    這篇文章主要介紹了將JavaDoc注釋生成API文檔的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 利用Thumbnailator輕松實(shí)現(xiàn)圖片縮放、旋轉(zhuǎn)與加水印

    利用Thumbnailator輕松實(shí)現(xiàn)圖片縮放、旋轉(zhuǎn)與加水印

    java開發(fā)中經(jīng)常遇到對圖片的處理,JDK中也提供了對應(yīng)的工具類,不過處理起來很麻煩,Thumbnailator是一個優(yōu)秀的圖片處理的開源Java類庫,處理效果遠(yuǎn)比Java API的好,這篇文章主要介紹了利用Thumbnailator如何輕松的實(shí)現(xiàn)圖片縮放、旋轉(zhuǎn)與加水印,需要的朋友可以參考下
    2017-01-01

最新評論

依兰县| 丰台区| 新邵县| 八宿县| 昌宁县| 安丘市| 轮台县| 山东省| 弥渡县| 太原市| 鹤山市| 定州市| 台江县| 海城市| 财经| 陇川县| 永定县| 大余县| 闵行区| 保靖县| 榕江县| 明溪县| 阜阳市| 达孜县| 连云港市| 友谊县| 监利县| 故城县| 保德县| 松江区| 平舆县| 资阳市| 望都县| 盘山县| 随州市| 裕民县| 阜城县| 兴安盟| 类乌齐县| 托里县| 弥勒县|