Appearance
MongoDB 学习笔记
Windows使用MongoDB
下载地址:https://www.mongodb.com/download-center/community

下载后双击运行
选择自定义安装,选择安装路径


非必须,为了避免安装过慢,取消MongoDB Compass的安装选项,需要可自行安装

双击运行bin目录下的mongo.exe

下载Windows客户端工具Robo 3T
下载地址:https://robomongo.org/download


解压后双击robo3t.exe即可启动
创建一个连接


点击Save之后点击Connect即可

Ubuntu使用MongoDB
使用Docker安装MongoDB
shell
#拉取镜像
docker pull mongo:latest
#创建和启动容器
docker run -d --restart=always -p 27017:27017 --name mongodb -v /data/db:/data/db -d mongo
#进入容器
docker exec -it mongodb /bin/bashshell
#使用MongoDB客户端进行操作
mongoshell
show dbs #查询所有的数据库
MongoDB相关操作
创建数据库
shell
use DATABASE_NAME如果数据库不存在,则创建数据库,否则切换到指定数据库。
删除数据库
db.dropDatabase()删除当前数据库

创建集合(表)
插入文档(数据)时可以自动创建集合
shell
db.test.insert({"testCollection":"123"})
也可以手动创建
shell
db.createCollection("test")删除集合
shell
db.test.drop()
插入文档
db.COLLECTION_NAME.insert(document)
或
db.COLLECTION_NAME.save(document)- save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。
- insert(): 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。
shell
db.test.insert({"testCollection":"123"})
3.2 版本之后新增了 db.collection.insertOne() 和 db.collection.insertMany()。
db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:
shell
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:
shell
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)参数说明:
- document:要写入的文档。
- writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
- ordered:指定是否按顺序写入,默认 true,按顺序写入。
以下文档可以存储在 MongoDB 的 test 数据库 的 test 集合中:
shell
db.test.insert({title: 'MongoDB',
description: 'MongoDB 是一个 Nosql 数据库',
})以上实例中 col 是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。
查看已插入文档:
shell
db.test.find()
我们也可以将数据定义为一个变量,如下所示:
shell
document=({title: 'MongoDB2',
description: 'MongoDB 是一个 Nosql 数据库',
});shell
db.test.insert(document)执行结果如下

更新文档
Update()方法
shell
db.test.update({'title':'MongoDB'},{$set:{'title':'MongoDB2'}})
这种写法只能修改第一条匹配的数据,若要修改多条符合条件的数据,应添加参数multi 为 true
shell
db.test.update({'title':'MongoDB'},{$set:{'title':'MongoDB3'}},{multi:true})
Save()方法
主键存在就更新,不存在就插入
shell
db.test.save({'title':'Save'})shell
db.test.save({
'_id':ObjectId('62d75b7339529166098af088'),
'title':'Save2'
})
删除文档
shell
db.test.remove({'title':'Save2'})
这样会删除所有符合条件的数据,若想要只删除第一条符合条件的数据,可以添加justOne参数为1
shell
db.test.remove({'title':'MongoDB3'},1)
删除所有数据
shell
db.test.remove({})查询文档
查询条件
| 操作 | 格式 | 范例 |
|---|---|---|
| 等于 | {<key>:<value>} | db.test.find({"title":"MongoDB3"}).pretty() |
| 小于 | {<key>:{$lt:<value>}} | db.test.find({"likes":{$lt:50}}).pretty() |
| 小于或等于 | {<key>:{$lte:<value>}} | db.test.find({"likes":{$lte:50}}).pretty() |
| 大于 | {<key>:{$gt:<value>}} | db.test.find({"likes":{$gt:50}}).pretty() |
| 大于或等于 | {<key>:{$gte:<value>}} | db.test.find({"likes":{$gte:50}}).pretty() |
| 不等于 | {<key>:{$ne:<value>}} | db.test.find({"likes":{$ne:50}}).pretty() |
AND 与 OR
db.test.find({"title": "MongoDB3", $or: [{"title": "Save"},{"description": "MongoDB 是一个 Nosql 数据库"}]}).pretty()
Docker 部署
yml
version: "3.8"
services:
mongo:
image: mongo:6.0
container_name: mongodb
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=PASSW0RD@12345
volumes:
- mongo-data:/data/db
ports:
- "27017:27017"
restart: unless-stopped
volumes:
mongo-data: