Skip to content

MongoDB 学习笔记

Windows使用MongoDB

下载地址:https://www.mongodb.com/download-center/community

1

下载后双击运行

选择自定义安装,选择安装路径

非必须,为了避免安装过慢,取消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/bash
shell
#使用MongoDB客户端进行操作 
mongo
shell
show dbs #查询所有的数据库

2022-07-19 22-124-02 的屏幕截图

MongoDB相关操作

创建数据库

shell
use DATABASE_NAME

如果数据库不存在,则创建数据库,否则切换到指定数据库。

删除数据库

db.dropDatabase()

删除当前数据库

sadda

创建集合(表)

插入文档(数据)时可以自动创建集合

shell
db.test.insert({"testCollection":"123"})

a

也可以手动创建

shell
db.createCollection("test")

删除集合

shell
db.test.drop()

a

插入文档

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"})

image-2022071a9230729455

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()

image-220220719231421344

我们也可以将数据定义为一个变量,如下所示:

shell
document=({title: 'MongoDB2', 
    description: 'MongoDB 是一个 Nosql 数据库',
});
shell
db.test.insert(document)

执行结果如下

image-202320719231545938

更新文档

Update()方法

shell
db.test.update({'title':'MongoDB'},{$set:{'title':'MongoDB2'}})

image-202204720092724583

这种写法只能修改第一条匹配的数据,若要修改多条符合条件的数据,应添加参数multitrue

shell
db.test.update({'title':'MongoDB'},{$set:{'title':'MongoDB3'}},{multi:true})

image-202205720093029444

Save()方法

主键存在就更新,不存在就插入

shell
db.test.save({'title':'Save'})
shell
db.test.save({
'_id':ObjectId('62d75b7339529166098af088'),
'title':'Save2'
})

image-202207620093515126

删除文档

shell
db.test.remove({'title':'Save2'})

7

这样会删除所有符合条件的数据,若想要只删除第一条符合条件的数据,可以添加justOne参数为1

shell
db.test.remove({'title':'MongoDB3'},1)

image-202720720094954220

删除所有数据

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()

image-202820720104345445

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: