玩转MongoDB—使用Go和Java客户端

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 玩转MongoDB—使用Go和Java客户端

话说上一节我们说到MongoDB的基本使用,当命令行的操作我们熟悉了以后,就可以使用相关的Driver,也就是驱动程序进行相关编程语言的使用操作,因为在实际的开发过程中总归是要用编程语言来控制的,因此这篇文章我们介绍两个最常用的编程语言—Go&Java,来使用各自的驱动链接并操作MongoDB,Start!

1 都有哪些语言有MongoDB的Driver

诺,如图:

网络异常,图片无法展示
|


你以为只有这些吗?

太小看我们的工程师群体了,我们还有研究并开源的社区版本的Drivers,如Dart、Erlang、Kotlin等等

附上链接:www.mongodb.com/docs/driver…

2 Go连接MongoDB

Doc.:www.mongodb.com/docs/driver…

2.1 添加依赖

go get go.mongodb.org/mongo-driver/mongo
复制代码

2.2 代码

main函数

package main
import (
   "context"
   "go.mongodb.org/mongo-driver/mongo"
   "go.mongodb.org/mongo-driver/mongo/options"
)
var Coll *mongo.Collection
func main() {
   //URL规则:
   //mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
   client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("mongodb://127.0.0.1:27017"))
   if err != nil {
      panic(err)
   }
   defer func() {
      if err := client.Disconnect(context.TODO()); err != nil {
         panic(err)
      }
   }()
   Coll = client.Database("test").Collection("books")
   //InsertOne()
   //InsertMany()
   //FindOne()
   //FindAny()
   //UpdateOne()
   //UpdateAny()
   DeleteOne()
}
复制代码

具体代码:

package main
import (
   "context"
   "encoding/json"
   "fmt"
   "go.mongodb.org/mongo-driver/bson"
   "go.mongodb.org/mongo-driver/mongo/options"
)
//InsertOne 添加一个
func InsertOne() {
   result, err := Coll.InsertOne(
      context.TODO(),
      bson.D{
         {"type", "计算机"},
         {"name", "《MongoDB教程》"},
         {"price", 9.9},
         {"vendor", bson.A{"JD", "TB"}},
      },
   )
   if err != nil {
      panic(err)
   }
   fmt.Println(result)
}
//InsertMany 添加一批
func InsertMany() {
   docs := []interface{}{
      bson.D{{"type", "计算机"},
         {"name", "《Go教程》"},
         {"price", 19.9},
         {"vendor", bson.A{"JD", "TB"}}},
      bson.D{{"type", "人文"},
         {"name", "《人间词话》"},
         {"price", 9.9},
         {"vendor", bson.A{"PDD", "TB"}}},
      bson.D{{"type", "计算机"},
         {"name", "《Java教程》"},
         {"price", 29.9},
         {"vendor", bson.A{"JD", "TB", "PDD"}}},
      bson.D{{"type", "计算机"},
         {"name", "《Redis教程》"},
         {"price", 19.9},
         {"vendor", bson.A{"JD", "TB"}}},
   }
   result, err := Coll.InsertMany(context.TODO(), docs)
   if err != nil {
      panic(err)
   }
   fmt.Println(result)
}
//FindOne 查找一个,多个符合条件的也返回一个
func FindOne() {
   var result bson.M
   err := Coll.FindOne(context.TODO(), bson.D{{"type", "计算机"}}).Decode(&result)
   if err != nil {
      panic(err)
   }
   jsonData, err := json.MarshalIndent(result, "", "")
   if err != nil {
      panic(err)
   }
   fmt.Printf("%s\n", jsonData)
}
//FindAny 查看多个
func FindAny() {
   var result bson.M
   //取前两条
   cursor, err := Coll.Find(context.TODO(), bson.D{}, options.Find().SetLimit(2))
   if err != nil {
      panic(err)
   }
   for cursor.Next(context.TODO()) {
      cursor.Decode(&result)
      jsonData, err := json.MarshalIndent(result, "", "")
      if err != nil {
         panic(err)
      }
      fmt.Printf("%s\n", jsonData)
   }
}
//UpdateOne 修改一个
func UpdateOne() {
   result, err := Coll.UpdateOne(
      context.TODO(),
      //修改条件
      bson.D{{"price", 9.9}},
      //修改结果
      bson.D{{"$set", bson.D{{"price", 39.9}}}},
   )
   if err != nil {
      panic(err)
   }
   //修改文档的数量
   fmt.Println(result.ModifiedCount)
}
//UpdateAny 修改符合条件的多个
func UpdateAny() {
   result, err := Coll.UpdateMany(
      context.TODO(),
      //修改条件
      bson.D{{"price", 39.9}},
      //修改结果
      bson.D{{"$set", bson.D{{"price", 9.99}}}},
   )
   if err != nil {
      panic(err)
   }
   //修改文档的数量
   fmt.Println(result.ModifiedCount)
}
//DeleteOne 删除一个
func DeleteOne() {
   result, err := Coll.DeleteOne(
      context.TODO(),
      bson.D{{"name", "《Redis教程》"}},
   )
   if err != nil {
      panic(err)
   }
   //删除文档的数量
   fmt.Println(result.DeletedCount)
}
复制代码

3 Java连接MongoDB

Doc.:www.mongodb.com/docs/driver…

3.1 依赖

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.6.1</version>
    <exclusions>
        <exclusion>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-core</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.mongodb</groupId>
            <artifactId>bson</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-core</artifactId>
    <version>4.6.1</version>
    <exclusions>
        <exclusion>
            <groupId>org.mongodb</groupId>
            <artifactId>bson</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>bson</artifactId>
    <version>4.6.1</version>
</dependency>
复制代码

3.2 代码

package org.ymx.sb_mongodb.cache;
import com.mongodb.client.*;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.InsertManyResult;
import com.mongodb.client.result.InsertOneResult;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.bson.conversions.Bson;
import java.util.ArrayList;
import java.util.Arrays;
import static com.mongodb.client.model.Filters.eq;
public class MongoDBUtil {
    private String url = "mongodb://localhost:27017";
    private MongoClient client;
    private MongoCollection<Document> collection;
    public void init() {
        // 注意,这里我们配置mongos服务信息即可
        client = MongoClients.create(url);
        //获取数据库
        MongoDatabase database = client.getDatabase("test");
        // 获取集合
        collection = database.getCollection("books");
    }
    public void insertOne() {
        Document doc = new Document("type", "计算机")
                .append("name", "《JavaScript教程》")
                .append("price", 59.9)
                .append("vendor", Arrays.asList("JD", "TB"));
        InsertOneResult result = collection.insertOne(doc);
        System.out.println(result.getInsertedId());
    }
    public void findOne() {
        Bson eq = eq("type", "计算机");
        FindIterable<Document> find = collection.find(eq);
        Document first = find.first();
        System.out.println(first);
    }
    public void insertMany() {
        ArrayList<Document> documents = new ArrayList<>();
        Document doc1 = new Document("type", "历史")
                .append("name", "《人类简史》")
                .append("price", 69.9)
                .append("vendor", Arrays.asList("JD", "TB"));
        Document doc2 = new Document("type", "历史")
                .append("name", "《近代史》")
                .append("price", 29.9)
                .append("vendor", Arrays.asList("JD", "TB"));
        Document doc3 = new Document("type", "计算机")
                .append("name", "《Python教程》")
                .append("price", 59.9)
                .append("vendor", Arrays.asList("JD", "TB"));
        documents.add(doc1);
        documents.add(doc2);
        documents.add(doc3);
        InsertManyResult result = collection.insertMany(documents);
        System.out.println(result.getInsertedIds());
    }
    public void updateOne() {
        Bson bson = Filters.eq("type", "计算机");
        Bson bson1 = Updates.set("type", "科学");
        UpdateResult result = collection.updateOne(bson, bson1);
        System.out.println(result.getModifiedCount());
    }
    public void findMany() {
        FindIterable<Document> documents = collection.find();
        documents.forEach(document -> {
            System.out.println(document);
        });
    }
    public void deleteOne() {
        DeleteResult result = collection.deleteOne(eq("name", "《MongoDB教程》"));
        System.out.println(result.getDeletedCount());
    }
    public static void main(String[] args) {
        MongoDBUtil util = new MongoDBUtil();
        util.init();
        //util.insertOne();
        //util.findOne();
        //util.insertMany();
        //util.updateOne();
        //util.findMany();
        //util.deleteOne();
    }
}
复制代码

4 总结

本篇文章仅展示了不同的编程语言连接MongoDB中最常用的操作,当然MongoDB的可用操作不止这些,大家还可以利用官方文档进行深入的研究。

参考:

www.zhangbj.com/p/670.html


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
JavaScript 前端开发 Java
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
874 103
|
28天前
|
人工智能 Kubernetes Java
回归开源,两位 Java 和 Go 程序员分享的开源贡献指引
Higress是一个基于Istio和Envoy的云原生API网关,支持AI功能扩展。它通过Go/Rust/JS编写的Wasm插件提供可扩展架构,并包含Node和Java的console模块。Higress起源于阿里巴巴,解决了Tengine配置重载及gRPC/Dubbo负载均衡问题,现已成为阿里云API网关的基础。本文介绍Higress的基本架构、功能(如AI网关、API管理、Ingress流量网关等)、部署方式以及如何参与开源贡献。此外,还提供了有效的开源贡献指南和社区交流信息。
325 34
|
1月前
|
人工智能 Java API
MCP客户端调用看这一篇就够了(Java版)
本文详细介绍了MCP(Model Context Protocol)客户端的开发方法,包括在没有MCP时的痛点、MCP的作用以及如何通过Spring-AI框架和原生SDK调用MCP服务。文章首先分析了MCP协议的必要性,接着分别讲解了Spring-AI框架和自研SDK的使用方式,涵盖配置LLM接口、工具注入、动态封装工具等步骤,并提供了代码示例。此外,还记录了开发过程中遇到的问题及解决办法,如版本冲突、服务连接超时等。最后,文章探讨了框架与原生SDK的选择,认为框架适合快速构建应用,而原生SDK更适合平台级开发,强调了两者结合使用的价值。
1799 27
MCP客户端调用看这一篇就够了(Java版)
|
15天前
|
NoSQL IDE MongoDB
Studio 3T 2025.10 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
Studio 3T 2025.10 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
75 0
Studio 3T 2025.10 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
|
1月前
|
存储 网络协议 Java
Java获取客户端IP问题:返回127.0.0.1
总结:要解决Java获取客户端IP返回127.0.0.1的问题,首先要找出原因,再采取合适的解决方案。请参考上述方案来改进代码,确保在各种网络环境下都能正确获取客户端IP地址。希望本文对您有所帮助。
144 25
|
2月前
|
NoSQL IDE MongoDB
Studio 3T 2025.7 发布 - MongoDB 的终极 GUI、IDE 和 客户端
Studio 3T 2025.7 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
90 3
Studio 3T 2025.7 发布 - MongoDB 的终极 GUI、IDE 和 客户端
|
1月前
|
NoSQL IDE MongoDB
Studio 3T 2025.8 发布 - MongoDB 的终极 GUI、IDE 和 客户端
Studio 3T 2025.8 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
68 0
Studio 3T 2025.8 发布 - MongoDB 的终极 GUI、IDE 和 客户端
|
3月前
|
NoSQL IDE MongoDB
Studio 3T 2025.5 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
Studio 3T 2025.5 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
139 2
Studio 3T 2025.5 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
|
2月前
|
人工智能 搜索推荐 程序员
用 Go 语言轻松构建 MCP 客户端与服务器
本文介绍了如何使用 mcp-go 构建一个完整的 MCP 应用,包括服务端和客户端两部分。 - 服务端支持注册工具(Tool)、资源(Resource)和提示词(Prompt),并可通过 stdio 或 sse 模式对外提供服务; - 客户端通过 stdio 连接服务器,支持初始化、列出服务内容、调用远程工具等操作。
648 4
|
3月前
|
NoSQL 数据可视化 MongoDB
微服务2——MongoDB单机部署3——Compass-图形化界面客户端
MongoDB Compass 是一款官方提供的图形化界面客户端,用于便捷管理 MongoDB 数据库。可前往官网下载([链接](https://www.mongodb.com/download-center/v2/compass?initial=true)),选择安装版或压缩版。安装版按步骤执行,压缩版解压后运行 `MongoDBCompassCommunity.exe` 即可。启动后,在界面输入主机地址与端口等信息完成连接。通过直观的可视化操作,提升数据库管理效率。
115 0
微服务2——MongoDB单机部署3——Compass-图形化界面客户端

推荐镜像

更多