关于 mongoose 与 mongodb笔记 暂时以问答方式叙述。
mongoose 与 mongodb 基本知识
什么是mongodb服务端和客户端
启动mongodb服务端,cmd命令为 mongod;这表明在电脑上启动了mongodb服务,启动了mongodb服务端;
启动mongodb客户端,cmd命令为 mongo;此命令执行后,cmd处于输入状态,可以对数据库进行增删改查;
以上两面命令 都基于mongodb安装目录(C:\Program Files\MongoDB\Server\4.0\bin)下的mongod.exe和mongo.exe;
在哪些目录下执行mongo等命令才能连接数据库?
启动mongodb有两层意思,一个是启动mongodb服务器,一个是启动mongodb的客户端mongo。
上面两个动作没有目录限制,这个命令是全局的,在任意目录上都启动cmd都可以操作MongoDB数据库。
整个电脑,任何项目创建的数据库,都可以通过任意目录下,启动
cmd都可以查到,并且对数据库进行增删改查操作。
启动mongodb 以及数据库、表格的查看
主要为两个命令:
mongod //启动mongod 服务器,这是一切操作数据库的基础准备工作
mongo //启动mongodb客户端,用来连接mongodb并进行相关数据的查询
具体步骤如下:
在任意目录下启动cmd 执行 mongod;
1 | $ mongod |
接着执行 mongo;
1 | $ mongo |
此时命令窗口处于等待输入命令的状态,就像输入node后,等待执行的情况。
数据库、表格的查看;
此时在此cmd窗口,接着输入以下命令,对数据库进行增删改查:
1 | $ mongo |
用mongodb原生命令还是mongoose操作数据库?
在这里只讨论node端。
值得注意的是,我们大多不通过mongodb原生命令操作数据库,而是通过mongoose;
一个是mongoose 更能优雅地进行MongoDB对象建模,
而且Mongoose写了很多mongodb的验证机制、类型转换与业务逻辑模板,然后提供几个简单的api给我们,简化了工作,等等。
因此在实际项目开发中,包括连接数据库以及之后的所有操作都是通过mongoose来操作。
因此建议不用太去花太多时间去看mongodb的api教程,稍微了解下即可,然后多看看mongoose的相关操作。
花更多时间学mongodb还是mongoose教程?
请参看《用mongodb原生命令还是mongoose操作数据库?》。
要不要手动建文件夹目录data\db?
我在刚接触 mongodb时,以为启动mongodb要建文件夹目录,用来存放数据库数据,其实不必了。
只要在cmd上启动好mongodb服务器就好,其他的就交给项目使用mongoose来操作mongodb就好。
不要创建什么数据库文件夹目录。
经典demo-创建数据库、表格和数据
demo 代码
启动mongodb后,在任意目录下,使用node 执行如下代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15const mongoose = require('mongoose');
//mongoose.connect 连接mongodb服务器中的数据库,newdbName是数据库名,有则连,无此name数据,就创建
mongoose.connect('mongodb://localhost:27017/newdbName',{
useNewUrlParser:true
});
//Schema 定义表格Field的类型和规则,这个过程称为 建数据模型
var schema = new mongoose.Schema({ name: 'string', size: 'string' });
//Model 将Schema定义的模型继承过来,生成表格tables,这里生成的名字为 Tank,在数据库中表格名是复数,见《的解释》
var Model = mongoose.model('Tank', schema);
//new Model()此方法用来表格数据的增删改查,
var small = new Model({ size: 'small' });
small.save(function (err) {
if (err) return handleError(err);
console.log('创建成功');
})
mongodb客户端mongo检测是否生成成功
将以上代码复制到js中,然后 node 该js试试,如果出现创建成功;
然后任意目录下 启动cmd,打开mongodb客户端,查看newdbName数据库是否生成,以下是正常生成的代码:
1 | Administrator@UO4SB7YL9WOZ3OK MINGW64 ~/Desktop |
mongodb、mongoose概念
本节内容参考如下,如有疑问点击如下连接详细了解。
参考1
参考2
mongodb 与 传统数据库 概念对比

mongodb 、mongoose 与 传统数据库 概念对比
mongoose核心概念 与 数据库知识 对应关系
小结
- mongodb中说的集合,其实就是tables,通过model生成;
- mongodb中说的文档,其实就是tables的行数据,通过model实例生成;
- mongoose的重点在Schema和model,其实与数据直接打交道最多的是model;
- 至于生成或连接数据库,就是mongoose.connect方法。
mongoose.model第一个参数的复数才是tables名字!!
mongoose.model(abc,oneSchema)定义的第一个参数abc,abc并非tables表格名字,它的复数才是,数据库中的表格名字是abces。
例如:1
2
3
4
5
6
7
8
9
10let Model = mongoose.model("fruit",Schema);
let apple = new Model({
category:'apple',
name:'apple'
});
apple.save()
cmd中执行命令:
show tables,
名字是fruits,非 fruit。
创建或连接数据库
创建和连接数据库一般通过mongoose,用的命令都是mongoose.connect。
在任意目录cmd,然后执行如下命令,看到mongodb服务器中有数据库twodb;1
2
3
4
5
6
7
8
9mongo
show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
newdbName 0.000GB
onedb 0.000GB
test 0.000GB
twodb 0.000GB
例如我现在要连接 数据库twodb,步骤如下
1 | mongoose.connect('mongodb://localhost:27017/twodb',{ |
如上,mongodb://localhost:27017/ 这是默认写法,twodb是数据库写法,
当twodb这个数据库在mongodb存在时,就连接此数据库,当不存在时,就是创建名为twodb的数据库。
mongodb://localhost:27017/dbName
我们如果要连接dbName数据库,为什么mongoose.connect的时候,却要写成mongodb://localhost:27017/twodb;
例如:1
mongoose.connect('mongodb://localhost:27017/twodb')
那么为什么要这样呢。
原来这是mongodb的标准 URI 连接语法:
1 | mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] |
- mongodb:// 这是固定的格式,必须要指定。
- username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库
- host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
- portX 可选的指定端口,如果不填,默认为27017
- /database 如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开 test 数据库。
- ?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开
这里就不展开了,更详细的请点击这里了解。
一般使用mongoose.connect(‘mongodb://localhost:27017/twodb’)连接即可。
mongodb目录
C:\Program Files\MongoDB\Server\4.0\bin
参考
深入浅出mongoose—–包括mongoose基本所有操作,非常实用!!!!!
mongodb 怎样检测 安装成功 以及mongodb的一些增删改查命令
MongoDB 教程