MongoDB学习

1、单击部署

1.1Windows中安装启动

从官网下载安装包

1
https://www.mongodb.com/try/download/community

1.2Linux下载

1
https://www.mongodb.com/try/download/community

下载完之后就解压

1
tar -xvf mongodb-linux-x86_64-amazon2023-8.2.2.tgz

新建几个目录,分别用来存储数据和日志

1
2
3
4
#数据存储目录
mkdir -p /mongodb/single/data/db
#日志存储目录
mkdir -p /mongodb/single/log

新建并修改配置文件

1
gedit /mongodb/single/mongod.conf

配置文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
systemLog:
destination: file
path: /mongodb/single/log/mongod.log
logAppend: true

storage:
dbPath: /mongodb/single/data/db
# journal.enabled 选项在新版本中已移除

processManagement:
fork: true

net:
bindIp: localhost
port: 27017

将mogdb配置环境变量

1
2
3
4
5
6
7
8
# 编辑bash配置文件
gedit ~/.bashrc

# 在文件末尾添加:
export PATH=$PATH:/mongodb/bin

# 使配置生效
source ~/.bashrc

想要自己连接上要

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 回到 mongodb 目录
cd /mongodb

# 下载 mongosh(MongoDB Shell)
wget https://downloads.mongodb.com/compass/mongosh-2.0.1-linux-x64.tgz

# 解压
tar -xzf mongosh-2.0.1-linux-x64.tgz

# 移动到 bin 目录或创建符号链接
sudo cp mongosh-2.0.1-linux-x64/bin/mongosh /usr/local/bin/

# 确保 mongosh 有执行权限
sudo chmod +x /usr/local/bin/mongosh

# 现在使用 mongosh 连接
mongosh --host localhost --port 27017
mongosh

注意:这个启动这个mongodb的时候是要先开启服务

1
2
(base) ┌─[drifting@drift1ng]─[~]
└──╼ $mongod -f /mongodb/single/mongod.conf

接着就可以直接连接上这个数据库

1
2
(base) ┌─[drifting@drift1ng]─[~]
└──╼ $mongosh

项目6初始化数据库出现的问题,解决方案,这个问题是因为数据库中存在一个旧的 login_name 索引(可能是之前其他项目留下的)。我们需要先清除数据库和这个索引。

1
mongosh cs142project6 --eval "db.users.dropIndexes()"

索引已删除。现在让我们清空并重新加载数据库:

1
mongosh cs142project6 --eval "db.dropDatabase()"

数据库已清空。现在重新加载数据:

1
node loadDatabase.js

2、基本常用命令

2.1数据库操作

2.1.1创建数据库

如果数据库不存在则自动创建,可以看下面这个例子

1
2
3
use 数据库名称
例如:
use articledb

查看所有数据库的命令

1
2
3
show dbs

show databases

在MongoDB中,集合只有在内容插入后才会创建

查看当前正在使用的数据库命令

1
db

Mongodb中默认的数据库是test,如果没有选择数据库,集合将存放在test数据库中。

2.1.2数据库的删除

MongoDB删除数据库的语法

1
db.dropDatabase()

提示:主要用来删除已经持久化的数据库

ℹ️ 提示

  • admin:从权限的角度来看,这是”root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端的命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器
  • local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config:当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息

2.2集合操作

2.2.1集合的显示创建

基本语法

1
db.createCollection(name)

参数说明:name是要创建的集合名称

例如:创建一个名为mycollection的普通集合

1
db.createCollection("mycollection")

查看当前数据库中的表:show tables命令

1
2
3
show collections

show tables

2.2.2集合的删除

集合删除语法格式如下:

1
2
3
db.collection.drop()

db.集合.drop()

返回值:如果成功删除选定的集合,则drop()方法返回true,否则放回false。例如删除mycollection集合

1
db.mycollection.drop()

2.3文档基本CRUD

2.3.1插入数据

向comment的集合中插入一条测试数据:

1
db.comment.insert({"articleid":"100000","content":"今天天气真好","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null})

1)如果comment集合不存在,则会隐式创建。
2)mongo中的数字,默认情况下是double类型,如果要存整型,必须使用函数NumberInt(整型数字),否则取出来就有问题
3)插入当前日期使用new Date()
4)插入数据没有指定_id,会自动生成主键值
5)如果某字段没值,可以赋值为null,或不写该字段

向comment中插入多条数据的方法是

1
db.comment.insertMany([{"articleid":"100000","content":"今天天气真好","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null},{"articleid":"100000","content":"今天天气真好","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null},{"articleid":"100000","content":"今天天气真好","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null}])

2.3.2查询数据

单个表(集合)的查询

1
2
3
db.comment.find({})

db.comment.find()

如果要查询userid为1003的数据

1
db.comment.find({userid:"1003"})

如果查询的用户有多条数据想要查看第一条数据可以使用

1
db.comment.findOne({userid:"1003"})

投影查询:如果查询的结果返回部分字段,则需要使用投影查询(不显示所有字段,只显示指定的字段)

如:查询结果只显示_id、userid、nickname:

1
db.comment.find({userid:"1003"},{userid:1,nickname:1})

2.3.3查看数据

先查看数据库

1
2
3
4
5
6
test> show dbs
admin 40.00 KiB
config 72.00 KiB
cs142project6 216.00 KiB
local 72.00 KiB
test>

接着就是选一个数据库进行查看

1
2
3
test> use cs142project6
switched to db cs142project6
cs142project6>

查看这个数据库中的表

1
2
3
4
5
cs142project6> show collections
photos
schemainfos
users
cs142project6>

接着查看一个users表中的数据

1
cs142project6> db.users.find()