Mongoose 对象文档模型库

一、介绍

Mongoose是一个对象文档模型库,官网:http://www.mongoosejs.net/

二、作用

方便使用代码操作Mongodb数据库

三、使用流程

//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require('mongoose');
//3. 连接数据库
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');
//4. 设置连接回调
//连接成功
mongoose.connection.on('open', () => {
	console.log('连接成功');
	//5. 创建文档结构对象
	let BookSchema = new mongoose.Schema({
		title: String,
		author: String,
		price: Number
	});
	//6. 创建文档模型对象
	let BookModel = mongoose.model('book', BookSchema);
	//7. 插入文档
	BookModel.create({
		title: '西游记',
		author: '吴承恩',
		price: 19.9
	}, (err, data) => {
		if (err) throw err;

		//输出 data 对象
		console.log(data);
		//8. 断开连接
		mongoose.disconnect();
	});
});
//连接出错
mongoose.connection.on('error', () => {
	console.log('连接出错~~');
})
//连接关闭
mongoose.connection.on('close', () => {
	console.log('连接关闭');
})

四、字段类型

类型描述
String字符串
Number数字
Boolean布尔值
Array数组,也可以使用 [] 来标识
Date日期
BufferBuffer 对象
Mixed任意类型,需要使用 mongoose.Schema.Types.Mixed 指定
ObjectId对象 ID,需要使用 mongoose.Schema.Types.ObjectId 指定
Decimal128高精度数字,需要使用 mongoose.Schema.Types.Decimal128 指定

五、字段验证

Mongoose 有一些内建验证器,可以对字段值进行验证

5.1 必填项

title: {
type: String,
required: true // 设置必填项
}

5.2 默认值

author: {
type: String,
default: '匿名' //默认值
},

5.3 枚举项

gender: {
type: String,
enum: ['男','女'] //设置的值必须是数组中的
},

5.5 唯一值

username: {
type: String,
unique: true
},

六、CURD

数据库的基本操作包括四个,增加(create),删除(delete),修改(update),查(read)

6.1 增加

插入一条

SongModel.create({
	title: '给我一首歌的时间',
	author: 'Jay'
}, function(err, data) {
	//错误
	console.log(err);
	//插入后的数据对象
	console.log(data);
});

插入多条

PhoneModel.insertMany([{
		brand: '华为',
		color: '灰色',
		price: 2399,
		tags: ['电量大', '屏幕大', '信号好']
	},
	{
		brand: '小米',
		color: '白色',
		price: 2099,
		tags: ['电量大', '屏幕大', '信号好']
	}
], (err, data) => {
	if (err) throw err;
	console.log('写入成功');
	mongoose.connection.close();
})

6.2 删除

删除一条数据

SongModel.deleteOne({
	_id: '5dd65f32be6401035cb5b1ed'
}, function(err) {
	if (err) throw err;
	console.log('删除成功');
	mongoose.connection.close();
});

删除多条

SongModel.deleteMany({
	author: 'Jay'
}, function(err) {
	if (err) throw err;
	console.log('删除成功');
	mongoose.connection.close();
});

6.3 更新

   //更新一条数据  第一个参数是需要更新的对象,第二个参数是要更新的字段
    BookModel.updateOne({name:'秋园'},{price:8}).then(res=>{
	    console.log(res)
    })
   
   //更新多条
   BookModel.updateMany({author:'余华'},{is_hot:false}).then(res=>{
   	   console.log(res)
   })

6.4 查询

SongModel.findOne({
	author: '王力宏'
}, function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});
//根据 id 查询数据
SongModel.findById('5dd662b5381fc316b44ce167', function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});
//不加条件查询
SongModel.find(function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});
//加条件查询 第一个参数是查询条件
SongModel.find({
	author: '王力宏'
}, function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});

七、条件控制

7.1 运算符

在 mongodb 不能 > < >= <= !== 等运算符,需要使用替代符号

  • > 使用 $gt
  • < 使用 $lt
  • >= 使用 $gte
  • <= 使用 $lte
  • !== 使用 $ne
db.students.find({id:{$gt:3}}); id号比3大的所有的记录

 7.2 逻辑运算

$or 逻辑或的情况

//查找年龄为18或者24的学生
db.students.find({$or:[{age:18},{age:24}]}); 

$and 逻辑与的情况

//查找年龄大于15并且小于20的学生
db.students.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]});

7.3 正则匹配

条件中可以直接使用 JS 的正则语法,通过正则可以进行模糊查询

db.students.find({name:/imissyou/});

八、个性化读取

8.1 字段筛选

//0:不要的字段
//1:要的字段
SongModel.find().select({
	_id: 0,
	title: 1
}).exec(function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});

8.2 数据排序

//sort 排序
//1:升序
//-1:倒序
SongModel.find().sort({
	hot: 1
}).exec(function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});

8.3 数据截取

//skip 跳过 limit 限定
SongModel.find().skip(10).limit(10).exec(function(err, data) {
	if (err) throw err;
	console.log(data);
	mongoose.connection.close();
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值