玩转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
相关文章
|
8天前
|
JSON NoSQL Java
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
这篇文章介绍了在Java中使用Redis客户端的几种方法,包括Jedis、SpringDataRedis和SpringBoot整合Redis的操作。文章详细解释了Jedis的基本使用步骤,Jedis连接池的创建和使用,以及在SpringBoot项目中如何配置和使用RedisTemplate和StringRedisTemplate。此外,还探讨了RedisTemplate序列化的两种实践方案,包括默认的JDK序列化和自定义的JSON序列化,以及StringRedisTemplate的使用,它要求键和值都必须是String类型。
redis的java客户端的使用(Jedis、SpringDataRedis、SpringBoot整合redis、redisTemplate序列化及stringRedisTemplate序列化)
|
22天前
|
NoSQL JavaScript Java
Java Python访问MongoDB
Java Python访问MongoDB
19 4
|
2月前
|
安全 Java Go
Java&Go泛型对比
总的来说,Java和Go在泛型的实现和使用上各有特点,Java的泛型更注重于类型安全和兼容性,而Go的泛型在保持类型安全的同时,提供了更灵活的类型参数和类型集的概念,同时避免了运行时的性能开销。开发者在使用时可以根据自己的需求和语言特性来选择使用哪种语言的泛型特性。
38 7
|
2月前
|
Java
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
64 1
|
2月前
|
存储 NoSQL Go
Go 使用 MongoDB
Go 使用 MongoDB
28 8
|
2月前
|
人工智能 NoSQL Go
Go MongoDB Driver 实例
Go MongoDB Driver 实例
15 1
|
2月前
|
人工智能 JSON NoSQL
Go MongoDB Driver 中的 A D M E 类型是什么
Go MongoDB Driver 中的 A D M E 类型是什么
32 1
|
2月前
|
测试技术 编译器 Go
依赖注入与控制反转:优化Go语言REST API客户端
依赖注入与控制反转:优化Go语言REST API客户端
|
3月前
|
消息中间件 Java Kafka
Java 客户端访问kafka
Java 客户端访问kafka
37 9
|
2月前
|
Java
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
下一篇
无影云桌面