上篇文章讲过MongoDB的一些概念,这篇文章想要来聊聊MongoDB在node中的使用。
node中使用MongoDB
node中使用MongoDB有两种方法
- 使用
mongodb包来操作:mongodb - 使用第三方
mongoose来操作mongodb数据库
在这里我就讲述一下mongoose的使用
Schema表定义模板Model类似关系数据库表instance类似记录,由Model创建的实体。
1、下载mongoose第三方包
npm i mongoose --save
2、demo.js进行测试
const mongoose = require('mongoose');
// 连接mongodb数据库
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true});
// 创建一个模型
// 就是在设计数据库
// MongoDB是动态的,非常灵活,只需要在代码中设计你的数据库就可以了
// mongoose这个包就可以让你的设计编写过程变得非常简单
const Cat = mongoose.model('Cat', { name: String });
for(let i=0; i<100; i++) {
// 实例化一个Cat
const kitty = new Cat({ name: 'Zildjian' + i });
// 持久化保存kitty实例
kitty.save().then(() => console.log('meow'));
}
Schema
想了解更多,参考文档Schema
Schema之所以能定义documents,是因为它可以限制输入的字段以及类型,mongoose支持的基本类型有:
- String
- Number
- Boolean
- Date
- Buffer
- Objectld
- Array
- Mixed
SchemaType
- require:必选验证器,默认值为
false - default:任何值或者函数设置此路径为默认值。
- enum: 枚举。
- select:布尔值,指定query的默认projections
- get
- set
- ...
设计文档结构
当了解Schema后,可对上述demo进一步操作
const mongoose = require('mongoose')
const Schema = mongoose.Schema
// 1、连接数据库
// 指定连接的数据库不需要已经存在,会在插入第一条数据之后自动被创建
mongoose.connect('mongodb://localhost/test')
// 2、设计文档结构(表结构)
// 字段名称就是表结构中的属性名称
// 约束的目的是为了保证数据的完整性,不要有脏数据
let useSchema = new Schema({
username: {
type: String,
require: true
},
password: {
type: String,
require: true
},
email: {
type: String,
require: false
}
})
// 3、将文档架构发布为模型
// mongoose.model方法就是用来将一个架构发布于model的
// 第一个参数: 传入一个大写名词单数字符串用来表示你的数据库名称
// mongoose会自动将大写名称的字符串生成小写复数的集合名称
// 例如这里的User会变为users集合名称
// 第二个参数: 架构Schema
// 返回值: 模型构造函数
const User = mongoose.model('User', useSchema);
对数据进行操作
当有了模型构造函数之后,就可以使用这个构造函数对users集合中的数据增删改查
增加数据
const admin = new User({
username: 'admin',
password: '12345',
email: '123@123.com'
})
admin.save(function(err, ret) {
if (err) {
console.log('保存失败')
} else {
console.log('保存成功')
console.log(ret)
}
})
查询数据
查询所有
User.find((err, ret) => {
if (err) {
console.log('查询失败')
} else {
console.log('查询成功')
console.log(ret)
}
})
按条件查询所有,其中还可以根据
id查询findById()
User.find({
username: 'lisi'
}, (err, ret) => {
if (err) {
console.log('查询失败')
} else {
console.log('查询成功')
console.log(ret)
}
})
按条件查询单个,也就是满足查询条件中的第一个
User.findOne({
username: 'lisi'
}, (err, ret) => {
if (err) {
console.log('查询失败')
} else {
console.log('查询成功')
console.log(ret)
}
})
删除数据
可以根据
id进行删除findByIdAndDelete
User.remove({
username: 'lisi'
}, (err, ret) => {
if (err) {
console.log('删除失败')
} else {
console.log('删除成功')
console.log(ret)
}
})
更新数据
根据
id进行更新
User.findByIdAndUpdate('5e301d22955ca339cc7e6ad0', {
password: '123'
}, (err, ret) => {
if (err) {
console.log('更新失败')
} else {
console.log('更新成功')
console.log(ret)
}
})
参看文档
想要了解,请参考 mongoose docs
注:此文为本人学习过程中的笔记记录,如果有错误或者不准确的地方请大佬多多指教~