nodejs学习05——mongoose
简介
Mongoose 是一个对象文档模型库,官网 http://www.mongoosejs.net/
作用:方便使用代码操作 mongodb 数据库
Mongodb数据库安装(Windows下) : https://www.cnblogs.com/htj10/p/17934098.html
初体验
//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require('mongoose');
//设置 strictQuery 为 true
mongoose.set('strictQuery', true);
//3. 连接 mongodb 服务 数据库的名称
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');
//4. 设置回调
// 设置连接成功的回调 once 一次 事件回调函数只执行一次
mongoose.connection.once('open', () => {
//5. 创建文档的结构对象
//设置集合中文档的属性以及属性值的类型
let BookSchema = new mongoose.Schema({
//name: String,
//author: String,
//price: Number
name: {
type: String,
required: true, // 表明该属性必须不为空
unique: true// 设置为独一无二的
},
author: {
type: String,
default: '匿名'
},
//类型
style: {
type: String,
//枚举
enum: ['言情','城市','志怪','恐怖']
},
price: Number
});
//6. 创建模型对象 对文档操作的封装对象
let BookModel = mongoose.model('books', BookSchema);
//7. 新增
BookModel.create({
name: '西游记',
// author: '吴承恩',
price: 19.9,
style: '志怪'
}, (err, data) => {
//判断是否有错误
if(err) {
console.log(err);
// console.log('插入失败~~~');
return;
}
//如果没有出错, 则输出插入后的文档对象
console.log(data);
//8. 关闭数据库连接 (项目运行过程中, 不会添加该代码)
mongoose.disconnect();
});
});
// 设置连接错误的回调
mongoose.connection.on('error', () => {
console.log('连接失败');
});
//设置连接关闭的回调
mongoose.connection.on('close', () => {
console.log('连接关闭');
});
条件查询
点击查看代码
//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require('mongoose');
//设置 strictQuery 为 true
mongoose.set('strictQuery', true);
//3. 连接 mongodb 服务 数据库的名称
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');
//4. 设置回调
// 设置连接成功的回调 once 一次 事件回调函数只执行一次
mongoose.connection.once('open', () => {
//5. 创建文档的结构对象
//设置集合中文档的属性以及属性值的类型
let BookSchema = new mongoose.Schema({
name: String,
author: String,
price: Number,
is_hot: Boolean
});
//6. 创建模型对象 对文档操作的封装对象 mongoose 会使用集合名称的复数, 创建集合, 即为 novels
let BookModel = mongoose.model('novel', BookSchema);
//价格小于 20 的图书
// BookModel.find({price: {$lt: 20}}, (err, data) => {
// if(err) {
// console.log('读取失败~~');
// return;
// }
// console.log(data);
// })
//曹雪芹 或者 余华的书
// BookModel.find({$or: [{author: '曹雪芹'}, {author: '余华'}]}, (err, data) => {
// if (err) {
// console.log('读取失败~~');
// return;
// }
// console.log(data);
// })
//价格大于 30 且小于 70
// BookModel.find({$and: [{price: {$gt: 30}}, {price: {$lt: 70}}]}, (err, data) => {
// if (err) {
// console.log('读取失败~~');
// return;
// }
// console.log(data);
// })
//正则表达式, 搜索书籍名称中带有 `三` 的图书
// BookModel.find({name: /三/}, (err, data) => {
// if (err) {
// console.log('读取失败~~');
// return;
// }
// console.log(data);
// })
BookModel.find({name: new RegExp('三')}, (err, data) => {
if (err) {
console.log('读取失败~~');
return;
}
console.log(data);
})
});
// 设置连接错误的回调
mongoose.connection.on('error', () => {
console.log('连接失败');
});
//设置连接关闭的回调
mongoose.connection.on('close', () => {
console.log('连接关闭');
});
删除文档
点击查看代码
//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require('mongoose');
//设置 strictQuery 为 true
mongoose.set('strictQuery', true);
//3. 连接 mongodb 服务 数据库的名称
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');
//4. 设置回调
// 设置连接成功的回调 once 一次 事件回调函数只执行一次
mongoose.connection.once('open', () => {
//5. 创建文档的结构对象
//设置集合中文档的属性以及属性值的类型
let BookSchema = new mongoose.Schema({
name: String,
author: String,
price: Number,
is_hot: Boolean
});
//6. 创建模型对象 对文档操作的封装对象 mongoose 会使用集合名称的复数, 创建集合
let BookModel = mongoose.model('novel', BookSchema);
//7. 删除一条
// BookModel.deleteOne({_id: '63f34af50cf203761ede1892'}, (err, data) => {
// //判断
// if(err){
// console.log('删除失败~~~');
// return;
// }
// //输出 data
// console.log(data);
// });
//批量删除
BookModel.deleteMany({is_hot: false}, (err, data) => {
//判断
if(err){
console.log('删除失败~~~');
return;
}
//输出 data
console.log(data);
});
});
// 设置连接错误的回调
mongoose.connection.on('error', () => {
console.log('连接失败');
});
//设置连接关闭的回调
mongoose.connection.on('close', () => {
console.log('连接关闭');
});
更新数据
点击查看代码
//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require('mongoose');
//设置 strictQuery 为 true
mongoose.set('strictQuery', true);
//3. 连接 mongodb 服务 数据库的名称
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');
//4. 设置回调
// 设置连接成功的回调 once 一次 事件回调函数只执行一次
mongoose.connection.once('open', () => {
//5. 创建文档的结构对象
//设置集合中文档的属性以及属性值的类型
let BookSchema = new mongoose.Schema({
name: String,
author: String,
price: Number,
is_hot: Boolean
});
//6. 创建模型对象 对文档操作的封装对象 mongoose 会使用集合名称的复数, 创建集合
let BookModel = mongoose.model('novel', BookSchema);
//7. 更新文档 更新一条
// BookModel.updateOne({name: '红楼梦'}, {price: 9.9}, (err, data) => {
// //判断 err
// if(err){
// console.log('更新失败~~');
// return;
// }
// //输出 data
// console.log(data);
// });
//批量更新
BookModel.updateMany({author: '余华'}, {is_hot: false}, (err, data) => {
//判断 err
if(err){
console.log('更新失败~~');
return;
}
//输出 data
//console.log(data);
});
});
// 设置连接错误的回调
mongoose.connection.on('error', () => {
console.log('连接失败');
});
//设置连接关闭的回调
mongoose.connection.on('close', () => {
console.log('连接关闭');
});
MongoDB中条件操作符
一些简写说明:
$gt -------- greater than >
$gte --------- gt equal >=
$lt -------- less than <
$lte --------- lt equal <=
$ne ----------- not equal !=
$eq -------- equal =
模糊查询
查询 title 包含"教"字的文档:
db.col.find({title:/教/})
查询 title 字段以"教"字开头的文档:
db.col.find({title:/^教/})
查询 title字段以"教"字结尾的文档:
db.col.find({title:/教$/})
————————————————
原文链接:https://blog.csdn.net/weixin_44905132/article/details/134474409
常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。
昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。