Node之使用Mongoose操作MongoDB
Updated:
在上一篇博客里介绍了MongoDB数据库,也基本上感知了MongoDB的基本用法,这一篇将介绍一下如何在node中使用mongodb
一、在Node中如何操作MongoDB 数据库
使用官方的MongoDB包来操作
https://www.npmjs.com/package/mongodb
在上边有官方的教程和步骤(比较源生)
使用第三方mongoose来操作MongoDB数据库
mongoose是一个基于MongoDB官方的做了再一次封装的mongodb包
Mongoose
1. 装包
npm init -y
npm install –save mongoose
2. 基本感知
我们创建demo1,然后将官网上的代码直接拿过来,我在下面进行了注释
然后打开cmd 输入mongod 连接mongodb,再运行下面代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// 引包
var mongoose = require('mongoose');
//连接 MongoDB 数据库
mongoose.connect('mongodb://localhost/test');
mongoose.Promise = global.Promise;
//创建一个模型(设计数据库)
var Cat = mongoose.model('Cat', { name: String });
// 实例化一个 Cat
var kitty = new Cat({ name: '喵喵'})
// 持久化保存 kitty 实例
kitty.save(function (err) {
if (err) {
console.log(err);
} else {
console.log('meow');
}
});
当我们运行该段代码会输出 meow
然后我们可以再打开一个cmd 输入mongo 然后输入 show dbs查看当前数据库
就会出现test,说明mongdb是动态的。
我们可以切换到test数据库下查看当前集合和集合中的数据
use test
show collections
db.cats.find
那个students是我之前建立的
输出100个meow1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 引包
var mongoose = require('mongoose');
//连接 MongoDB 数据库
mongoose.connect('mongodb://localhost/test');
mongoose.Promise = global.Promise;
//创建一个模型(设计数据库)
var Cat = mongoose.model('Cat', { name: String });
for(var = 0; i < 100; i++) {
var kitty = new Cat({ name: '喵喵' + i})
kitty.save(function (err) {
if (err) {
console.log(err);
} else {
console.log('meow');
}
});
}
二、 Mongoose 基本感知
1. 连接数据库
连接的是本机的test数据库,如果想改就可以改
注意:指定连接的数据库不需要存在,当你插入第一条数据之后就会自动被创建出来
mongoose.connect(‘mongodb://localhost/test’)
2. 设计文档结构(表结构)
字段名称就是表结构中的属性名称,值可以是其他类型(js数据类型)
需要对字段进行约束,约束的目的是为了保证数据的完整性,不要有脏数据1
2
3
4
5
6
7
8
9
10
11
12
13var userSchema = new Schema({
username: {
type: String,
required: true // 必须有
},
password: {
type: String,
required: true
},
email: {
type: String
}
})
3. 将文档结构发布为模型
mongoose.model 方法就是用来将一个架构发布为 model
第一个参数:传入一个大写名词单数字符串用来表示你的数据库名称,mongoose 会自将大写名词的字符串生成 小写复数 的集合名称,例如这里的 User 最终会变为 users 集合名称
第二个参数:架构 Schema
返回值:模型构造函数
var User = mongoose.model(‘User’, userSchema)
下面附上源码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var mongoose = require('mongoose')
var Schema = mongoose.Schema
//连接数据库
mongoose.connect('mongodb://localhost/test')
var userSchema = new Schema({
username: {
type: String,
required: true // 必须有
},
password: {
type: String,
required: true
},
email: {
type: String
}
})
var User = mongoose.model('User', userSchema)
三、 基本操作
1. 新增数据
我插入了一条name为zs的数据
1 |
|
结果:
result表示新增的数据
2.查询数据
- 查询所有
1
2
3
4
5
6
7
8
User.find(function (err, ret) {
if (err) {
console.log('查询失败')
} else {
console.log(ret)
}
})
如下图可以看见查询出来的是一个数组
- 按条件查询
在此之前我又插入一条name为李四的数据,利用上一步方法,可以查询到所有结果
使用以下代码查询名字为zs的数据1
2
3
4
5
6
7
8
9
10
User.find({
username: 'zs'
}, function (err, ret) {
if (err) {
console.log('查询失败')
} else {
console.log(ret)
}
})
输出为:
- 按条件查询单个
1 | User.findOne({ |
以下为输出结果,可以看书输出不是数组,而是对象
注意: 若查询条件为空,默认输出第一条数据
3. 删除数据
- 根据条件删除所有
1
2
3
4
5
6
7
8
9
10
11
User.remove({
username: 'zs'
}, function (err, ret) {
if (err) {
console.log('删除失败')
} else {
console.log('删除成功')
console.log(ret)
}
})
查询所有输出结果为:
根据条件删除一个
model.findOneAndRemove(conditions, [options], [callback])
根据id删除一个
model.fingByIdAndRemove(id, [options], [callback])
4. 更新数据
- 根据id更新一个
这里的id是和刚刚查询出来的保持一致1
2
3
4
5
6
7
8
9User.findByIdAndUpdate('5bd3117b5db711042015908f', {
password: '123'
}, function (err, ret) {
if (err) {
console.log('更新失败')
} else {
console.log('更新成功')
}
})
初始李四密码结果如下:
得到更新后的李四密码:
根据条件更新所有
model.update(conditions, doc, [options], [callback])
根据指定条件更新一个
model.findOneAndUpdate(conditions, [update], [options], [callback])