MongoDB快速入门

MongoDB安装(Ubuntu)apt模式安装

sudo apt-get install gnupg curl
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | 
   sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg 
   --dearmor
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
mongod -version
# 开启mongd
sudo systemctl start mongod
# 查看mongodb状态 active表示正在运行
sudo systemctl status mongod
# 设置mongodb可以开机自启动
sudo systemctl enable mongod

停止

sudo systemctl stop mongod

重启

sudo systemctl restart mongod

为了让外网可以访问到MongoDB,需要修改对应的配置文件

sudo vim /etc/mongod.conf
# 把bindIP的值修改为0.0.0.0

需要注意的是,这样子的设置会导致非常不安全,如果只是为了学习当然无所谓,不过一般还是建议设置一下密码,(这一步可选)

先在配置文件启动鉴权模式
在这里插入图片描述

然后使用mongosh进入命令行模式

然后给对应的数据库创建用户(我这里统一用户名就是root,密码就是sql2008)

use test
db.createUser({user:"root",pwd:"sql2008",roles:[{role:"readWrite",db:"test"}]})

基本操作方法

在进行实际操作之前,我们需要先了解一下MongoDB的基础数据模型是怎么样的

最基础的部分主要包括:

  • 数据库 database或者db
  • 集合collection(也可以叫做表)
  • 集合的一条记录 document
  • 记录当中的字段 field

可以简单的理解为一个JSON数组,MongoDB存储主要是采用了Bson(Binary JSON)的形式存储

在这里插入图片描述

命令行模式

切换到数据库,如果没有则会新建

use test

需要注意的是,如果开启了权限校验,就需要先登录(如果没有开启则可以跳过这一步)

db.auth("root","sql2008")

默认情况下数据库当中没有任何集合,我们新建一个集合

show collections
db.createCollection("teacher")

在这里插入图片描述

然后在对这个集合插入一条数据或多条

db.teacher.insertOne({"name":"sakura"})
db.teacher.insertMany([{"name":"sakura"},{"name":"test"}])

查看集合数据

db.teacher.find()

需要注意的是MongoDB里面也有主键的概念,就是它默认会给你添加一个"_id"字段,然后生成一个唯一标识符,但是如果在插入时手动的指定了"__id"的值,就必须保证这个值是唯一的不然插入就会失败

更新数据,MongoDB的更新操作可以支持多种形式的更新,比如只更新第一条匹配到的记录,或者更新所有匹配到的记录、如果不存在就当新记录插入集合等,具体实现可以通过参数实现
在这里插入图片描述

db.teacher.updateOne({"name":"sakura0"},{$set:{"age":10}})

删除 deleteOne、deleteMany(与插入类似)

db.teacher.deleteOne({"name":"sakura"})

还有就是删除整个集合

dp.teacher.drop()

删除整个数据库

db.dropDatabase()

需要注意的是,这里的drop删除,更加准确的理解应该是清除,它只是把记录和数据全都删除了,但是删除对象的本身还是存在的,比如drop删除整个集合,集合里面一条记录都没有了,但这个集合本身还是存在的。

编程模式,以Java为例

开发工具:idea(推荐)

如果不会有idea的话,建议看一下下面这篇文章,快速入门

https://zhuanlan.zhihu.com/p/469563500

首先需要强调的是,MongoDB一定要先保证外网可以访问

为了让外网可以访问到MongoDB,需要修改对应的配置文件

sudo vim /etc/mongod.conf
# 把bindIP的值修改为0.0.0.0

然后就是新建一个maven项目,导入对应的依赖,

tips:一般maven依赖都可以去中央仓库搜索:https://mvnrepository.com/

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

这种类型的第三方依赖一般都是会提供给你一个客户端对象,让你可以去操作MongoDB

所以我们要做的就是把配置换成自己的,初始化一个自己的客户端对象,然后进行后续操作

第一步:

初始化客户端对象,这里我写了一个工具类用于统一的管理

为了方便管理对应的数据库配置(比如数据库的IP地址、用户名和密码,要访问的数据库),我这里将其统一写到了配置文件当中,具体做法就是在src/main路径下新建一个resources资源目录,然后新建一个配置文件mongofb.properties

host=192.168.10.129
port=27017
dbname=test
password=sql2008
username=root

然后读取该配置文件初始化对应的客户端对象

public class MongoUtils {
    private static Properties properties;
    private static MongoDatabase mongoDatabase;
    private static InputStream stream;
    private static String host;
    private static int port;
    private static String dbname;
    private static String password;
    private static String username;

    //创建一个静态代码块,用于初始化工具类的静态变量,该静态代码块在类加载过程中的初始化阶段执行,并且只执行一次
    static {
        //判断properties集合对象是否为空,为空则创建一个集合对象
        if (properties == null) {
            properties = new Properties();
        }
        /*
         * 由于我们会调用load方法,而load方法低层抛出了一个IOException异常,此异常为编译时期异常所以,
         * 我们调用load方法时,需要处理低层抛过来的异常*/
        try {
            //创建一个InputStream字节输入流对象,用于接收mongodb.properties配置文件中的配置参数
            stream = MongoUtils.class.getClassLoader().getResourceAsStream("mongodb.properties");
            //properties集合对象调用load()方法,将配置参数加载到properties集合中
            properties.load(stream);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        //根据mongodb.properties配置文件中的key,获取value值
        host = properties.getProperty("host");
        port = Integer.parseInt(properties.getProperty("port"));
        dbname = properties.getProperty("dbname");
        password = properties.getProperty("password");
        username = properties.getProperty("username");
    }

    //定义一个getMongoClient()方法,用于获取MOngoDB数据库的连接对象
    public static MongoClient getMongoClient() {
        String addr = "mongodb://" + username + ":" + password + "@" + host + ":" + port;
        MongoClient mongoClient = MongoClients.create(addr);
        return mongoClient;
    }
    public static MongoDatabase getMongoDao() {
        String addr = "mongodb://" + username + ":" + password + "@" + host + ":" + port;
        MongoClient mongoClient = MongoClients.create(addr);
        return mongoClient.getDatabase(dbname);
    }
}

然后就是针对基础的API进行使用,在下面我只列出了最基础的实现,增删改查的基础实现,如果有更精细化的要求,建议阅读官方文档:

https://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/

public class TestMongoDB {
    private static MongoDatabase mongoDao;
    private static MongoClient mongoClient;

    @Before
    public void init() {
        mongoDao = MongoUtils.getMongoDao();
        mongoClient = MongoUtils.getMongoClient();
    }


    /**
     * 查看数据库
     */
    @Test
    public void showDBs() {
        MongoIterable<String> strings = mongoClient.listDatabaseNames();
        for (String string : strings) {
            System.out.println(string);
        }
    }

    /**
     * 查看所有集合
     */
    @Test
    public void listCollections() {
        ListCollectionsIterable<Document> documents = mongoDao.listCollections();
        for (Document document : documents) {
            System.out.println(document);
        }
    }

    /**
     * 创建集合
     */
    @Test
    public void createCollection() {
        mongoDao.createCollection("test_collection");
    }

    /**
     * 插入数据到集合
     */
    @Test
    public void insertOne() {
        MongoCollection<Document> test = mongoDao.getCollection("test");
        Document one = new Document();
        one.put("name", "sakura");
        one.put("age", 18);
        test.insertOne(one);
    }

    /**
     * 删除
     */
    @Test
    public void deleteOne() {
        MongoCollection<Document> test = mongoDao.getCollection("test");
        test.deleteOne(Filters.eq("name", "sakura"));
        // 删除所有符合匹配条件的数据
        // test.deleteMany(Filters.eq("name", "sakura"));
    }

    /**
     * 修改记录document
     */
    @Test
    public void update() {
        MongoCollection<Document> test = mongoDao.getCollection("test");
        test.updateOne(Filters.eq("name", "sakura")
                , new Document("$set", new Document("age", 20)));
    }

    @Test
    public void listDocument() {
        MongoCollection<Document> test = mongoDao.getCollection("test");
        FindIterable<Document> documents = test.find();
        for (Document document : documents) {
            System.out.println(document);
        }
    }

}

  • 20
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值