官网:http://www.mongoosejs.net/docs/guide.html
一、初始化项目 npm init
二、安装 npm i mongoose
,推荐版本6 npm i mongoose@6.11.2
// 1、安装 mongoose
// 2、导入 mongoose
const mongoose = require('mongoose')
// 如果连接成功后出现 strictQuery 的警告,设置 strictQuery 为 true 即可,均无任何影响。
mongoose.set('strictQuery', true);
// 3、连接 mongodb 服务 数据库的名称
mongoose.connect('mongodb://127.0.0.1:27017/mydata');
// 4、设置回调
// 设置连接成功的回调 官方推荐 once 事件回调函数只执行一次,on会自动重连。
mongoose.connection.once('open', () => {
console.log('连接成功');
// 5、创建文档的结构对象
// 设置集合中文档的属性以及属性值的类型
let BookSchema = new mongoose.Schema({
name: String,
author: String,
price: Number
})
// 6、创建模型对象 对文档操作的封装对象
let BookModel = mongoose.model('books', BookSchema);
// 7、新增
BookModel.create({
name: '唐诗',
author: '李白',
price: 9.9
}, (err, data) => { //此处如果 mongoose 7版本,则用 then.(),但无法执行 mongoose.disconnect()方法,原因未解决;
if (err) {
console.log(err);
return;
}
// 输出插入后的文档对象
console.log(data)
// 8、关闭数据库连接 (项目运行过程中,不会添加该代码)
// mongoose.disconnect();
})
});
// 设置连接错误的回调
mongoose.connection.on('error', () => {
console.log('连接失败');
});
// 关闭数据库连接 (项目运行过程中,不会添加该代码)
mongoose.connection.on('close', () => {
console.log('连接关闭');
});
运行命令:node .\01_链接数据库.js
以下简单介绍使用(数据类型、规则校验、删除、读取、条件设置、个性化读取):
// 1、安装 mongoose
// 2、导入 mongoose
const mongoose = require('mongoose')
// 如果连接成功后出现 strictQuery 的警告,设置 strictQuery 为 true 即可,均无任何影响。
mongoose.set('strictQuery', true);
// 3、连接 mongodb 服务 数据库的名称
mongoose.connect('mongodb://127.0.0.1:27017/mydata');
// 4、设置回调
// 设置连接成功的回调 官方推荐 once 事件回调函数只执行一次,on会自动重连。
mongoose.connection.once('open', () => {
console.log('连接成功');
// 5、创建文档的结构对象
// 设置集合中文档的属性以及属性值的类型
let BookSchema = new mongoose.Schema({
name: {
type: String,
required: true //必填,不能为空
},
author: {
type: String,
default: '匿名', //默认值
},
style: {
type: String,
enum: ['城市', '农村'] //枚举值
},
userName: {
type: String,
unique: true, //设置唯一值(重建集合才生效!)
},
price: Number
})
// 6、创建模型对象 对文档操作的封装对象 mongoose 会使用集合名称的复数,创建集合(如:book将成为books)
let BookModel = mongoose.model('book', BookSchema);
// 7、新增
// BookModel.create({
// name: '王者荣耀',
// // author: '李白',
// style: '城市',
// userName: '西游记',
// price: 130
// }, (err, data) => { //此处如果 mongoose 7版本,则用 then.(),但无法执行 mongoose.disconnect()方法,原因未解决;
// if (err) {
// console.log(err);
// return;
// }
// // 输出插入后的文档对象
// console.log(data)
// // 8、关闭数据库连接 (项目运行过程中,不会添加该代码)
// // mongoose.disconnect();
// })
// 7、删除一条
// BookModel.deleteOne({userName:'西游记222'},(err,data) => {
// if(err){
// console.log('删除失败··')
// return;
// }
// console.log(data)
// })
// 7、批量删除
// BookModel.deleteMany({userName:'西游记'},(err,data) => {
// if(err){
// console.log('删除失败··')
// return;
// }
// console.log(data)
// })
// 7、更新文档 更新一条
// BookModel.updateOne({userName:'西游记'},{userName:'西游记阿啦啦啦啦'}, (err, data) => {
// if (err) {
// console.log('更新失败··')
// return;
// }
// console.log(data)
// })
// 更新文档 批量
// BookModel.updateMany({userName:'西游记'},{userName:'西游记阿啦啦啦啦'}, (err, data) => {
// if (err) {
// console.log('更新失败··')
// return;
// }
// console.log(data)
// })
// 7、读取单条
// BookModel.findOne({author:'李白'}, (err, data) => {
// if (err) {
// console.log('读取失败··')
// return;
// }
// console.log(data)
// })
// 批量读取
// BookModel.find({author:'李白'}, (err, data) => {
// if (err) {
// console.log('读取失败··')
// return;
// }
// console.log(data)
// })
// 读取所有
// BookModel.find((err, data) => {
// if (err) {
// console.log('读取失败··')
// return;
// }
// console.log(data)
// })
// 7、条件设置
// 价格小于 20 的
// BookModel.find({ price: { $lt: 10 } }, (err, data) => {
// if (err) {
// console.log('读取失败··')
// return;
// }
// console.log(data)
// })
// 或者 条件
// BookModel.find({ $or: [{ name: '王者荣耀' },{ name: '穿越火线' } ]}, (err, data) => {
// if (err) {
// console.log('读取失败··')
// return;
// }
// console.log(data)
// })
// 或者 且
// BookModel.find({ $and: [{ name: '王者荣耀' }, { price: { $lt: 150 } }] }, (err, data) => {
// if (err) {
// console.log('读取失败··')
// return;
// }
// console.log(data)
// })
// 7、正则匹配
// BookModel.find({ name: /王/ }, (err, data) => {
// if (err) {
// console.log('读取失败··')
// return;
// }
// console.log(data)
// })
// 不确定关键字,可能放在变量中,用new RegExp才能解析
// BookModel.find({ name: new RegExp('王') }, (err, data) => {
// if (err) {
// console.log('读取失败··')
// return;
// }
// console.log(data)
// })
// 7、个性化读取
// 设置字段(只读取 name 和 author)
// BookModel.find().select({ name: 1, author: 1 }).exec((err, data) => {
// if (err) {
// console.log('读取失败··')
// return;
// }
// console.log(data)
// })
// 数据排序 小到大
// BookModel.find().select({ name: 1, author: 1, price: 1 }).sort({ price: 1 }).exec((err, data) => {
// if (err) {
// console.log('读取失败··')
// return;
// }
// console.log(data)
// })
// 数据排序 大到小 的 前三条数据
// BookModel.find().select({ name: 1, author: 1, price: 1 }).sort({ price: -1 }).limit(3).exec((err, data) => {
// if (err) {
// console.log('读取失败··')
// return;
// }
// console.log(data)
// })
// 数据排序 大到小 的数据截取
BookModel.find().select({ name: 1, author: 1, price: 1 }).sort({ price: -1 }).skip(1).limit(3).exec((err, data) => {
if (err) {
console.log('读取失败··')
return;
}
console.log(data)
})
});
// 设置连接错误的回调
mongoose.connection.on('error', () => {
console.log('连接失败');
});
// 关闭数据库连接 (项目运行过程中,不会添加该代码)
mongoose.connection.on('close', () => {
console.log('连接关闭');
});