mongoose学习记录

mongoose安装和连接数据库

npm i mongoose

导入mongoose

const mongoose = require('mongoose')
mongoose.set("strictQuery",true)

连接数据库

mongoose.connect('mongodb:127.0.0.1:27017/test')

设置回调

mongoose.connection.on('open',()=>{
   
	console.log("连接成功")
})

mongoose.connection.on('error',()=>{
   
	console.log("连接失败")
})

mongoose.connection.on('close',()=>{
   
	console.log("连接关闭")
})
setTimeout(()=>{
   
	mongoose.disconnect();
},2000)

mongoose.connection.on与mongoose.connection.once的区别在于当数据库断开时,once,回调函数不会执行,而on可以

插入文档

mongoose.connection.on('open',()=>{
   
	//5.创建文档的结构对象
	//设置集合中文档的属性以及属性值的类型
	let BookSchema =new mongoose.Schema({
   
		name:String,
		author:String,
		price:Number
	})
	//6.创建模型对象。对文档操作的封装对象
	let BookModel = mongoose.model('book',BookSchema) //数据库名(集合),数据库表名(结构对象)
	BookModel.create({
   
		name:"西游记",
		author:"吴承恩",
		price:20
	},(err,data)=>{
   
		if(err){
   
			console.log(err)
			return
		}
		console.log(data)
	})
	//项目运行过程中,不会添加该代码
	mongoose.disconnect();
})

字段类型

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

字段值验证

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

必填项

title:{
   type:String,required:true}

默认项

title:{
   type:String,default:"匿名"}

枚举值

title:{
   type:String,enum:[1,2]}

唯一值

title:{
   type:String,unique:true}

删除文档

mongoose.connection.on('open',()=>{
   
	//5.创建文档的结构对象
	//设置集合中文档的属性以及属性值的类型
	let BookSchema =new mongoose.Schema({
   
		name:String,
		author:String,
		price:Number
	})
	//6.创建模型对象。对文档操作的封装对象
	let BookModel = mongoose.model('book',BookSchema) //数据库名(集合),数据库表名(结构对象)
	// 删除一个
	BookModel.deleteOne({
   author:'曹雪芹'},(err,data)=>{
   
		if(err){
   
			console.log("删除失败")
			return
		}
		console.log(data)
	}
	// 批量删除
	BookModel.deleteMany({
   is_hot:false},(err,data)=>{
   
		if(err){
   
			console.log("删除失败")
			return
		}
		console.log(data)
	}
	//项目运行过程中,不会添加该代码
	mongoose.disconnect();
})

更新文档

mongoose.connection.on('open',()=>{
   
	//5.创建文档的结构对象
	//设置集合中文档的属性以及属性值的类型
	let BookSchema =new mongoose.Schema({
   
		name:String,
		author:String,
		price:Number
	})
	//6.创建模型对象。对文档操作的封装对象
	let BookModel = mongoose.model('book',BookSchema) //数据库名(集合),数据库表名(结构对象)
	// 更新
	BookModel.updateOne({
   name:"红楼梦"},{
   price:9.9},(err,data)=>{
   
		if(err){
   
			console.log("更新失败")
			return
		}
		console.log(data)
	}
	// 批量更新
	BookModel.updateMany({
   author:"余华"},{
   is_hot:true},(err,data)=>{
   
		if(err){
   
			console.log("更新失败")
			return
		}
		console.log(data)
	}
	//项目运行过程中,不会添加该代码
	mongoose.disconnect();
})

读取文档

mongoose.connection.on('open',()=>{
   
	//5.创建文档的结构对象
	//设置集合中文档的属性以及属性值的类型
	let BookSchema =new mongoose.Schema({
   
		name:String,
		author:String,
		price:Number
	})
	//6.创建模型对象。对文档操作的封装对象
	let BookModel = mongoose.model('book',BookSchema) //数据库名(集合),数据库表名(结构对象)
	// 读取
	BookModel.findOne({
   name:"红楼梦"},(err,data)=>{
   
		if(err){
   
			console.log("读取失败")
			return
		}
		console.log(data)
	}
	// 根据id获取
	BookModel.findById("a124s",(err,data)=>{
   
		if(err){
   
			console.log("读取失败")
			return
		}
		console.log(data)
	}
	// 批量读取
	BookModel.find({
   author:"余华"},(err,data)=>{
   
		if(err){
   
			console.log("读取失败")
			return
		}
		console.log(data)
	}
	// 读取all
	BookModel.find((err,data)=>{
   
		if(err){
   
			console.log("读取失败")
			return
		}
		console.log(data)
	}
	//项目运行过程中,不会添加该代码
	mongoose.disconnect();
})

条件控制

运算符

在mongodb不能> < >= <= !==等运算符,需要使用替代符号
> 使用$gt
<使用$lt
>=使用$gte
<=使用$lte
!==使用$ne

BookeModel.find({
   price:{
   $lt:20}},(err,data)=>{
   
	if(err){
   
		console.log("读取失败")
		return
	}
	console.log(data)
})

逻辑运算

$or逻辑或的情况

BookeModel.find({
   $or:[{
   author:"曹雪芹"},{
   author:"余华"}]},(err,data)=>{
   
	if(err){
   
		console.log("读取失败")
		return
	}
	console.log(data)
})

$and逻辑与的情况

BookeModel.find({
   $and:[{
   price:{
   $gt:30}},{
   price:{
   $lt:70}}]},(err,data)=>{
   
	if(err){
   
		console.log("读取失败")
		return
	}
	console.log(data)
})

正则匹配

BookeModel.find({
   name://},(err,data)=>{
   
	if(err){
   
		console.log("读取失败")
		return
	}
	console.log(data)
})
BookeModel.find({
   name:new RegExp('三')},(err,data)=>{
   
	if(err){
   
		console.log("读取失败")
		return
	}
	console.log(data)
})

个性化读取

字段筛选

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

数据排序

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

数据截取

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

代码模块化

#TODO
在这里插入图片描述

相关推荐

  1. mongoose入门

    2023-12-05 18:14:02       33 阅读
  2. 学习记录————

    2023-12-05 18:14:02       66 阅读
  3. mysql学习记录

    2023-12-05 18:14:02       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-05 18:14:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-05 18:14:02       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-05 18:14:02       82 阅读
  4. Python语言-面向对象

    2023-12-05 18:14:02       91 阅读

热门阅读

  1. QT基础教程(文本绘制)

    2023-12-05 18:14:02       57 阅读
  2. Verilog基本语法概述

    2023-12-05 18:14:02       62 阅读
  3. 3台4核16G机器搭建K8S集群

    2023-12-05 18:14:02       55 阅读
  4. element-UI中el-scrollbar的使用

    2023-12-05 18:14:02       58 阅读
  5. OWASP Web 安全测试指南-Web 应用程序安全测试

    2023-12-05 18:14:02       56 阅读
  6. Vue3使用阿里云OSS直传

    2023-12-05 18:14:02       64 阅读
  7. 【无标题】

    2023-12-05 18:14:02       72 阅读
  8. Linux: FS: inotify

    2023-12-05 18:14:02       48 阅读