首页 > 编程语言 >nodejs学习05——mongoose

nodejs学习05——mongoose

时间:2023-12-29 11:48:42浏览次数:27  
标签:console log err nodejs 05 mongoose data 连接

简介

Mongoose 是一个对象文档模型库,官网 http://www.mongoosejs.net/
作用:方便使用代码操作 mongodb 数据库

初体验

//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('连接关闭');
});


标签:console,log,err,nodejs,05,mongoose,data,连接
From: https://www.cnblogs.com/htj10/p/17934440.html

相关文章

  • 05 FPGA流水灯实验
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述本章课程以大家熟悉的流水灯为例子,详细讲解了VIVADO软件的使用,包括创建FPGA工程,编写Verilog代码,添加管......
  • springcloud动力节点-05Sleuth
    SpringCloudSleuth1.什么是链路追踪官网:https://spring.io/projects/spring-cloud-sleuth链路追踪就是:追踪微服务的调用路径2.链路追踪的由来在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个请求都会开成一......
  • 洛谷 P9058 [Ynoi2004] rpmtdq
    洛谷传送门类比P9062[Ynoi2002]AdaptiveHsearch&Lsearch处理区间最近点对的思路,尝试只保留可能有贡献的点对。处理树上路径容易想到点分治。设点\(u\)到分治中心的距离为\(a_u\)。我们有\(\text{dis}(u,v)\lea_u+a_v\)。考虑一个点对\((u,v)\)什么时候一定没......
  • 在nodejs环境里使用canvas和sharp生成图片
    1.安装依赖包npminstalljsdomcanvas2.实例代码const{JSDOM}=require('jsdom');const{createCanvas}=require('canvas');//创建一个虚拟DOM环境constdom=newJSDOM('<!DOCTYPEhtml><html><head></head><body>&......
  • std::max、std::min error C2589: “(”:“::”右边的非法标记,error C2059: 语法错误:
    个人采用方案三解决问题。在VC++种同时包含头文件#include<windows.h>和#include<algorithm>后就会出现无法正常使用std标准库中的min和max模板函数,经过查阅发现这是因为在Windows.h种也有min和max的定义,这样就导致了algorithm中的min和max无法正常使用,这里给出两种解决方案,来......
  • 405错误---Request method 'POST' not supported
     错误:Requestmethod'POST'notsupported--方法不支持  解决: 多数情况下,是由于GET,POST,DELETE,PUT等方法类型不一致导致的。 所以将请求方法改回就好。例:此处的@Get方法改为@Post   ......
  • 05跟踪约束
       01,ClampToConstraint钳制到约束(这个要约束在曲线上,运动也在曲线上)轴向限定(ClampTo)约束将一个对象限定到曲线上。轴向限定(ClampTo)约束和跟随路径(FollowPath)约束非常类似。但不是使用目标曲线计算时间,轴向限定(ClampTo)获得其自身的实际位置属性(在变换......
  • 05 读写I2C接口EEPROM实验
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述我们知道I2C总线具备广泛的用途,比如寄存器的配置,EEPROM的使用,更重要的是I2C总线上可以挂载非常多的外......
  • 05.手机浏览器的性能分析(硬埋点)
    1.https://www.w3.org/TR/navigation-timing/ 2.资源加载指标promptforunload:访问一个新页面时,旧页面卸载完成的时间。redirect:重定向,用户注销登陆时返回主页面和跳转到其它的网站等appcache:检查缓存,是否打开DNS(域名系统):DNS查询的时间,如果是长连接或者请求文件来......
  • day 05-1 数据类型(整型和布尔类型)
    day05数据类型int,整数类型(整形)bool,布尔类型str,字符串类型list,列表类型tuple,元组类型dict,字典类型set,集合类型float,浮点类型(浮点型)(小数)每种数据类型的讲解,会按照以下4个维度来进行:定义独有功能公共功能类型转换、其他1整型(int)整型(整数类型)就是十进......