1、MongoDB的基本感知
MongoDB
是非关系型数据库,不用设计表,每个表都是集合的概念。装好MongoDB
后,打开终端命令行输入命令mongo
连接数据库,就可以在命令行下使用MongoDB
的一些命令:
如图所示MongoDB
连接成功。
MongoDB
的一些基本命令:
show dbs
查看 显示所有数据库
use 数据库名称
切换到指定的数据库(如果没有会创建) 当插入数据后 show dbs会显示出来。- 插入数据,
db.students.insertOne({"name": "counterrr"})
。 - 查当前数据下所有集合
show collections
。 db.students.find()
查出students
集合下所有数据。
2、Node.js中使用MongoDB
使用MongoDB
官方的包mongodb
,官方文档。
但是我们真正开发一般不会使用这个包。一般使用第三方mongoose
来操作MongoDB
,第三方包基于官方的包mongodb
做了封装。接下来我们基于mongoose
来做下demo
:
- 在桌面创建文件
mogoose-demo
,然后将这个文件夹拖到vscode
编辑器。 - 然后打开
vscode
的终端命令行,输入命令npm init -y
快速生成项目说明书。 - 再输入命令
npm install mongoose
。安装mongoose
这个包。 - 在根目录下创建
db.js
,输入代码:
然后我们运行下,在命令中输入// 引入mongoose const mongoose = require('mongoose'); // 连接MongoDB数据库 mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true}); // 创建模型,Cat这个模型它会自动生成一个cats集合,里面有name这个属性,并且是String类型的 const Cat = mongoose.model('Cat', { name: String }); // 实例化一个Cat const kitty = new Cat({ name: 'Zildjian' }); // 持久化保存 kitty.save().then(() => console.log('meow'));
node db.js
,如下:
成功打印出来。然后我们去终端命令行查看:
发现是有数据的。接下来我循环让它生成100条数据并且插入到数据库中,代码如下:
// 引入mongoose
const mongoose = require('mongoose');
// 连接MongoDB数据库
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true});
// 创建模型,Cat这个模型它会自动生成一个cats集合,里面有name这个属性,并且是String类型的
const Cat = mongoose.model('Cat', { name: String });
for(let i = 0; i < 100; i++) {
// 实例化一个Cat
const kitty = new Cat({ name: '喵喵' + i });
// 持久化保存
kitty.save().then(() => console.log('meow'));
}
打开终端进行查看:
全程完全跟javascript
语法类似。非常灵活,改起来没有那么多条条框框。
接下来我们再在根目录下创建db2.js
来练习下集合结构,代码如下:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true});
var userSchema = new Schema({
name: {
type: String,
required: true
},
password: {
type: String,
required: true
}
});
// 模型构造函数
const User = mongoose.model('User', userSchema);
-
在这个
js
文件中,我们新增了Schema
,那这个就是去设置这个集合的架构,例如name
和password
字段是String
类型的且是必须的,最后我们发布这个模型构造函数,Model
为User
,但是MongoDB
会自动生成users
集合,大写变小写,单数变复数的形式生成集合。再开一个终端命令,输入命令mongod
进行连接数据库。如下所示成功:
接下来我们在这个基础上进行增删改查:
- 增:
(在原有代码的基础上增加如下代码)// 创造实例 const user = new User({ name: 'Counterrr', password: 'mongodb' }) // 存储实例 user.save().then((data) => { console.log('存储成功') console.log(data) }, () => { console.log('存储失败') })
接着命令行输入
node db2.js
:
我们可以看到成功的返回参数就是当前这个数据。
- 查:
我们注释掉增的代码,然后在原有基础上增加如下代码:// 查询所有 User.find((err, res) => { if (err) { console.log('查询失败') } else { console.log('查询成功') console.log(res) } })
重新运行
node db2.js
:
可以看到查询成功。也可以根据条件进行查询,我们再插入一条数据:// 创造实例 const user = new User({ name: '小红', password: 'mongodb' }) // 存储实例 user.save().then((data) => { console.log('存储成功') console.log(data) }, () => { console.log('存储失败') })
可以看到我们又插入一条数据,接着我们注释掉上面存储小红的这段代码,然后我们需要查出名字叫小红的这条数据,条件查询如下:
// 查询小红 User.find({ name: '小红' }, (err, res) => { if (err) { console.log('查询失败') } else { console.log('查询成功') console.log(res) } })
重新运行
node db2.js
,效果如下:
可以看到我们跟了一个条件{name: '小红'}
,这样的话叫小红的都会被查询出来。
- 删除:
我们注释掉查询的代码,输入删除的代码:User.deleteOne({ name: '小红' }).then((data) => { console.log('删除成功') console.log(data) }, (err) => { console.log('删除失败') console.log(err) })
查看效果:
可以看见提示我们删除成功。
- 更新:
注释删除代码,输入如下更新代码:User.updateOne({ name: 'Counterrr' }, {name: 'Counter'}).then((data) => { console.log('更新成功') console.log(data) }, (err) => { console.log('更新失败') console.log(err) })
我们把
name
为Counterrr
更新为Counterrr
,如图:
再去查询:
已经被更改了。
MongoDB更多增删改查接口点击查看
好的后面我们将用MongoDB
来重新重构下我们之前写的学生系统。加深印象。