Node.js开发-MongoDB

MongoDB

  • 1) Mongoose
  • 2) 插入文档
  • 3) 字段类型
  • 4) 字段值验证
  • 5) CRUD
    • 1) 增加
    • 2) 删除
    • 3) 更新
    • 4) 查询
  • 6) 条件控制
    • 1) 运算符
    • 2) 逻辑运算
    • 3) 正则匹配
  • 7) 个性化读取
    • 1) 字段筛选
    • 2) 数据排序
    • 3) 数据截取

1) Mongoose

介绍

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

作用

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

使用流程

// 导入mongoose
const mongoose = require("mongoose");// 连接 mongodb
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');// 设置回调
mongoose.connection.on("open", () => {// 设置连接成功的回调console.log("连接成功");
});
mongoose.connection.on("error", () => {// 设置连接错误的回调console.log("连接失败");
});
mongoose.connection.on("close", () => {// 设置连接关闭的回调console.log("连接关闭");
});// 关闭连接
setTimeout(() => {mongoose.disconnect();
}, 2000);

2) 插入文档

// 导入mongoose
const mongoose = require("mongoose");mongoose.set('strictQuery', false);// 连接 mongodb
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');// 设置回调
mongoose.connection.once("open", () => {// 创建文档的结构对象let BookSchema = new mongoose.Schema({name: String,author: String,price: Number});// 创建模型对象let BookModel = mongoose.model('books', BookSchema);// 新增BookModel.create({name: "西游记",author: "吴承恩",price: 19.9}, (err,data)=>{if (err) {console.log(err);return;}console.log(data);mongoose.disconnect();});
});
mongoose.connection.on("error", () => {// 设置连接错误的回调console.log("连接失败");
});
mongoose.connection.on("close", () => {// 设置连接关闭的回调console.log("连接关闭");
});

3) 字段类型

文档结构可选的常用字段类型列表

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

4) 字段值验证

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

必填项

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

默认值

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

枚举值

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

唯一值 (主键)

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

unique 需要 重建集合 才能有效果

5) CRUD

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

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();
})

2) 删除

删除一条数据

BookModel.deleteOne({_id: "65c60c85df92ad81ab74d4a8"}, (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);
});

3) 更新

更新一条

BookModel.updateOne({name: "红楼梦"}, {price: 9.9}, (err, data) => {if (err) {console.log(err);return;}console.log(data);
});

批量更新

BookModel.updateMany({author: "余华"}, {is_hot: false}, (err, data) => {if (err) {console.log(err);return;}console.log(data);
});

4) 查询

查询单条数据

BookModel.findOne({name: "狂飙"}, (err, data) => {if (err) {console.log(err);}console.log(data);
});

根据id查询

BookModel.findById({_id: "65c60c85df92ad81ab74d4b9"}, (err, data) => {if (err) {console.log(err);}console.log(data);
});

批量查询 (条件可以不添加则自动获取所有)

BookModel.find({author: "余华"}, (err, data) => {if (err) {console.log(err);}console.log(data);
});

6) 条件控制

1) 运算符

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

  • > 使用 $gt

  • < 使用 $lt

  • >= 使用 $gte

  • <= 使用 $lte

  • !== 使用 $ne

db.students.find({id: {$gt: 3}}); id号比3大的所有的记录

2) 逻辑运算

$or 逻辑或的情况

db.students.find({$or: [{age:18},{age:24}]});

$and 逻辑与的情况

db.students.find({$and: [{age: {$lt:20}}, {age: {$gt: 15}}]});

3) 正则匹配

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

db.students.find({name://});
db.students.find({name: new RegExp('刘')});

7) 个性化读取

1) 字段筛选

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

2) 数据排序

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

3) 数据截取

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/684860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在已有代码基础上创建Git仓库

在已有代码基础上创建Git仓库 背景方法处理问题 背景 先进行了代码编写&#xff0c;后续想放入仓库方便大家一起合作开发&#xff0c;此时需要在已有代码的基础上建立仓库。 方法 首先在Gitee或者GitHub上创建仓库&#xff0c;这里以Gitee为例。创建完后&#xff0c;我们可以…

各类有关于花卉的深度学习数据集

花卉的识别和分类在深度学习过程中是最常见的使用的案例&#xff0c;因此各类有关花卉分类、识别、计数的图像数据集是大家都常用的数据集。最近收集到各类有关花卉的各类数据集分享给大家&#xff01;&#xff01; 1、16种花常见的图像数据集 数据说明&#xff1a;我们看到我…

Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务

目录: OpenID 与 OAuth2 基础知识Blazor wasm Google 登录Blazor wasm Gitee 码云登录Blazor SSR/WASM IDS/OIDC 单点登录授权实例1-建立和配置IDS身份验证服务Blazor SSR/WASM IDS/OIDC 单点登录授权实例2-登录信息组件wasmBlazor SSR/WASM IDS/OIDC 单点登录授权实例3-服务端…

1070A A. Find a Number bfs同时处理数和数位和 ,依次处理每一位数

Problem - 1070A - Codeforces A - Find a Number CodeForces - 1070A -记忆化广搜-同余定理_codeforces 1070a find a number(bfs)-CSDN博客 这个大佬的博客代码写的非常好看。 ———— &#xff08;其实第二个样例32位的数long long存不下&#xff0c;就知道这道题不是寻…

【实战】一、Jest 前端自动化测试框架基础入门(二) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(二)

文章目录 一、Jest 前端自动化测试框架基础入门5.Jest 中的匹配器toBe 匹配器toEqual匹配器toBeNull匹配器toBeUndefined匹配器和toBeDefined匹配器toBeTruthy匹配器toBeFalsy匹配器数字相关的匹配器字符串相关的匹配器数组相关的匹配器异常情况的匹配器 6.Jest 命令行工具的使…

DSA 经典数据结构与算法 学习心得和知识总结(三) |有向无环图及其应用

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《算法导论》第三版 就是这本被封神的杰作&#xff0c;就是它&#x1f926; 2、参考书籍&#xff1a;《数据结构》严奶奶版 3、参考书…

DataX源码分析-插件机制

系列文章目录 一、DataX详解和架构介绍 二、DataX源码分析 JobContainer 三、DataX源码分析 TaskGroupContainer 四、DataX源码分析 TaskExecutor 五、DataX源码分析 reader 六、DataX源码分析 writer 七、DataX源码分析 Channel 八、DataX源码分析-插件机制 文章目录 系列文章…

基于GPT一键完成数据分析全流程的AI Agent: Streamline Analyst

大型语言模型&#xff08;LLM&#xff09;的兴起不仅为获取知识和解决问题开辟了新的可能性&#xff0c;而且催生了一些新型智能系统&#xff0c;例如旨在辅助用户完成特定任务的AI Copilot以及旨在自动化和自主执行复杂任务的AI Agent&#xff0c;使得编程、创作等任务变得高效…

Prompt Tuning:深度解读一种新的微调范式

阅读该博客&#xff0c;您将系统地掌握如下知识点&#xff1a; 什么是预训练语言模型&#xff1f; 什么是prompt&#xff1f;为什么要引入prompt&#xff1f;相比传统fine-tuning有什么优势&#xff1f; 自20年底开始&#xff0c;prompt的发展历程&#xff0c;哪些经典的代表…

【ASP.NET Core 基础知识】--最佳实践和进阶主题--微服务和容器化

Tip&#xff1a;想要了解并学习微服务和容器化的知识&#xff0c;请跳转到《Docker极简教程》 一、微服务概述 1.1 什么是微服务&#xff1f; 微服务&#xff08;Microservices&#xff09;是一种软件架构风格&#xff0c;其中软件系统被划分为一组小型、自治的服务单元&…

CV | Segment Anything论文详解及代码实现

本文主要是详解解释了SAM的论文部分以及代码实现~ 论文&#xff1a;2023.04.05_Segment Anything 论文地址&#xff1a;2304.02643.pdf (arxiv.org) 代码地址&#xff1a;facebookresearch/segment-anything: The repository provides code for running inference with the Seg…

RabbitMQ实现延迟消息的方式-死信队列、延迟队列和惰性队列

当一条消息因为一些原因无法被成功消费&#xff0c;那么这这条消息就叫做死信&#xff0c;如果包含死信的队列配置了dead-letter-exchange属性指定了一个交换机&#xff0c;队列中的死信都会投递到这个交换机内&#xff0c;这个交换机就叫死信交换机&#xff0c;死信交换机再绑…

随机过程及应用学习笔记(四) 马尔可夫过程

马尔可夫过程是理论上和实际应用中都十分重要的一类随机过程。 目录 前言 一、马尔可夫过程的概念 二、离散参数马氏链 1 定义 2 齐次马尔可夫链 3 齐次马尔可夫链的性质 三、齐次马尔可夫链状态的分类 四、有限马尔可夫链 五、状态的周期性 六、极限定理 七、生灭过…

【洛谷 B3614】【模板】栈 题解(栈+STL)

【模板】栈 题目描述 请你实现一个栈&#xff08;stack&#xff09;&#xff0c;支持如下操作&#xff1a; push(x)&#xff1a;向栈中加入一个数 x x x。pop()&#xff1a;将栈顶弹出。如果此时栈为空则不进行弹出操作&#xff0c;输出 Empty。query()&#xff1a;输出栈顶…

接口测试方法论

第1章 测试那点事 单元测试》接口测试》界面测试 接口就是包含特定输入和特定输出的一套逻辑处理单元&#xff0c;用户无须知晓接口的内部实现逻辑&#xff0c;这也可以称为接口的黑河处理逻辑。因为服务对象不同&#xff0c;接口又可分为两种&#xff1a;一种是系统或服务的…

K8S集群实践之十:虚拟机部署阶段性总结

目录 1. 说明&#xff1a; 2. 安装准备 2.1 每个节点设置双网卡&#xff0c;一卡做网桥&#xff08;外部访问&#xff09;&#xff0c;一卡做NAT&#xff08;集群内网访问&#xff09; 2.2 准备一个可用的代理服务器 3. 由于虚拟机崩溃&#xff08;停电&#xff0c;宿主机…

VBA技术资料MF119:数据验证的添加与删除

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

《苍穹外卖》知识梳理p7-用户下单与模拟微信支付

用户下单与微信支付 一.用户下单 1.1 订单表的设计 订单功能是一个核心的功能&#xff1b; 需要使用2张表&#xff1a; 1.订单表&#xff1a;记录一些订单信息&#xff0c;比如收货人&#xff0c;收获地址&#xff0c;支付金额&#xff0c;下单时间等&#xff1b; 2.订单详情…

GitLab配置SSHKey

段落一&#xff1a;什么是SSH密钥 SSH&#xff08;Secure Shell&#xff09;是一种网络协议&#xff0c;用于安全地远程登录和执行命令。SSH密钥是一种用于身份验证的加密文件&#xff0c;它允许您在与远程服务器通信时&#xff0c;无需输入密码即可进行认证。在GitLab中配置S…