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

举报
海风极客 发表于 2022/10/18 22:49:10 2022/10/18
【摘要】 话说上一节我们说到MongoDB的基本使用,当命令行的操作我们熟悉了以后,就可以使用相关的Driver,也就是驱动程序进行相关编程语言的使用操作,因为在实际的开发过程中总归是要用编程语言来控制的,因此这篇文章我们介绍两个最常用的编程语言—Go&Java,来使用各自的驱动链接并操作MongoDB,Start! 1 都有哪些语言有MongoDB的Driver诺,如图:你以为只有这些吗?太小看我们...

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

1 都有哪些语言有MongoDB的Driver

诺,如图:
在这里插入图片描述
你以为只有这些吗?

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

附上链接:https://www.mongodb.com/docs/drivers/community-supported-drivers/

2 Go连接MongoDB

Doc.:https://www.mongodb.com/docs/drivers/go/current/

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.:https://www.mongodb.com/docs/drivers/java-drivers/

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的可用操作不止这些,大家还可以利用官方文档进行深入的研究。

参考:

https://www.zhangbj.com/p/670.html

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。