玩转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


相关文章
|
28天前
|
安全 Java 编译器
对比Java学习Go——基础理论篇
本章介绍了Java开发者学习Go语言的必要性。Go语言以简单、高效、并发为核心设计哲学,摒弃了传统的类继承和异常机制,采用组合、接口和多返回值错误处理,提升了代码清晰度与开发效率。Go直接编译为静态二进制文件,启动迅速、部署简便,其基于Goroutine和Channel的并发模型相较Java的线程与锁机制更轻量安全。此外,Go Modules简化了依赖管理,与Java的Maven/Gradle形成鲜明对比,提升了构建与部署效率。
|
6月前
|
JavaScript 前端开发 Java
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
1168 103
|
5月前
|
人工智能 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流量网关等)、部署方式以及如何参与开源贡献。此外,还提供了有效的开源贡献指南和社区交流信息。
528 34
|
4月前
|
NoSQL IDE MongoDB
Studio 3T 2025.11 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
Studio 3T 2025.11 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
226 3
|
10天前
|
NoSQL IDE MongoDB
Studio 3T 2025.17 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
Studio 3T 2025.17 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
75 1
Studio 3T 2025.17 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
|
18天前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
28天前
|
存储 Java 编译器
对比Java学习Go——程序结构与变量
本节对比了Java与Go语言的基础结构,包括“Hello, World!”程序、代码组织方式、入口函数定义、基本数据类型及变量声明方式。Java强调严格的面向对象结构,所有代码需置于类中,入口方法需严格符合`public static void main(String[] args)`格式;而Go语言结构更简洁,使用包和函数组织代码,入口函数为`func main()`。两种语言在变量声明、常量定义、类型系统等方面也存在显著差异,体现了各自的设计哲学。
|
4月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
250 61
|
5月前
|
人工智能 Java API
MCP客户端调用看这一篇就够了(Java版)
本文详细介绍了MCP(Model Context Protocol)客户端的开发方法,包括在没有MCP时的痛点、MCP的作用以及如何通过Spring-AI框架和原生SDK调用MCP服务。文章首先分析了MCP协议的必要性,接着分别讲解了Spring-AI框架和自研SDK的使用方式,涵盖配置LLM接口、工具注入、动态封装工具等步骤,并提供了代码示例。此外,还记录了开发过程中遇到的问题及解决办法,如版本冲突、服务连接超时等。最后,文章探讨了框架与原生SDK的选择,认为框架适合快速构建应用,而原生SDK更适合平台级开发,强调了两者结合使用的价值。
6983 33
MCP客户端调用看这一篇就够了(Java版)
|
4月前
|
NoSQL IDE MongoDB
Studio 3T 2025.10 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
Studio 3T 2025.10 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端
291 21
Studio 3T 2025.10 (macOS, Linux, Windows) - MongoDB 的终极 GUI、IDE 和 客户端

推荐镜像

更多