MongoDB快速入门
MongoDB安装(Ubuntu)apt模式安装
1
| sudo apt-get install gnupg curl
|
1 2 3
| curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
|
1
| 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
|
1
| sudo apt-get install -y mongodb-org
|
1 2
| sudo systemctl start mongod
|
1 2
| sudo systemctl status mongod
|
1 2
| sudo systemctl enable mongod
|
停止
1
| sudo systemctl stop mongod
|
重启
1
| sudo systemctl restart mongod
|
为了让外网可以访问到MongoDB,需要修改对应的配置文件
1 2
| sudo vim /etc/mongod.conf
|
需要注意的是,这样子的设置会导致非常不安全,如果只是为了学习当然无所谓,不过一般还是建议设置一下密码,(这一步可选)
先在配置文件启动鉴权模式
然后使用mongosh进入命令行模式
然后给对应的数据库创建用户(我这里统一用户名就是root,密码就是sql2008)
1 2
| use test db.createUser({user:"root",pwd:"sql2008",roles:[{role:"readWrite",db:"test"}]})
|
基本操作方法
在进行实际操作之前,我们需要先了解一下MongoDB的基础数据模型是怎么样的
最基础的部分主要包括:
- 数据库 database或者db
- 集合collection(也可以叫做表)
- 集合的一条记录 document
- 记录当中的字段 field
可以简单的理解为一个JSON数组,MongoDB存储主要是采用了Bson(Binary JSON)的形式存储

命令行模式
切换到数据库,如果没有则会新建
需要注意的是,如果开启了权限校验,就需要先登录(如果没有开启则可以跳过这一步)
1
| db.auth("root","sql2008")
|
默认情况下数据库当中没有任何集合,我们新建一个集合
1 2
| show collections db.createCollection("teacher")
|
然后在对这个集合插入一条数据或多条
1 2
| db.teacher.insertOne({"name":"sakura"}) db.teacher.insertMany([{"name":"sakura"},{"name":"test"}])
|
查看集合数据
需要注意的是MongoDB里面也有主键的概念,就是它默认会给你添加一个”_id”字段,然后生成一个唯一标识符,但是如果在插入时手动的指定了”__id”的值,就必须保证这个值是唯一的不然插入就会失败
更新数据,MongoDB的更新操作可以支持多种形式的更新,比如只更新第一条匹配到的记录,或者更新所有匹配到的记录、如果不存在就当新记录插入集合等,具体实现可以通过参数实现
1
| db.teacher.updateOne({"name":"sakura0"},{$set:{"age":10}})
|
删除 deleteOne、deleteMany(与插入类似)
1
| db.teacher.deleteOne({"name":"sakura"})
|
还有就是删除整个集合
删除整个数据库
需要注意的是,这里的drop删除,更加准确的理解应该是清除,它只是把记录和数据全都删除了,但是删除对象的本身还是存在的,比如drop删除整个集合,集合里面一条记录都没有了,但这个集合本身还是存在的。
编程模式,以Java为例
开发工具:idea(推荐)
如果不会有idea的话,建议看一下下面这篇文章,快速入门
https://zhuanlan.zhihu.com/p/469563500
首先需要强调的是,MongoDB一定要先保证外网可以访问
为了让外网可以访问到MongoDB,需要修改对应的配置文件
1 2
| sudo vim /etc/mongod.conf
|
然后就是新建一个maven项目,导入对应的依赖,
tips:一般maven依赖都可以去中央仓库搜索:https://mvnrepository.com/
1 2 3 4 5
| <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.10</version> </dependency>
|
这种类型的第三方依赖一般都是会提供给你一个客户端对象,让你可以去操作MongoDB
所以我们要做的就是把配置换成自己的,初始化一个自己的客户端对象,然后进行后续操作
第一步:
初始化客户端对象,这里我写了一个工具类用于统一的管理
为了方便管理对应的数据库配置(比如数据库的IP地址、用户名和密码,要访问的数据库),我这里将其统一写到了配置文件当中,具体做法就是在src/main路径下新建一个resources资源目录,然后新建一个配置文件mongofb.properties
1 2 3 4 5
| host=192.168.10.129 port=27017 dbname=test password=sql2008 username=root
|
然后读取该配置文件初始化对应的客户端对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| 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 { if (properties == null) { properties = new Properties(); }
try { stream = MongoUtils.class.getClassLoader().getResourceAsStream("mongodb.properties"); properties.load(stream); } catch (IOException e) { throw new RuntimeException(e); } host = properties.getProperty("host"); port = Integer.parseInt(properties.getProperty("port")); dbname = properties.getProperty("dbname"); password = properties.getProperty("password"); username = properties.getProperty("username"); }
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/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| 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 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); } }
}
|