100 # mongoose 的使用

mongoose

elegant mongodb object modeling for node.js

https://mongoosejs.com/

安装 mongoose

npm i mongoose

基本示例

const mongoose = require("mongoose");// 1、连接 mongodb
let conn = mongoose.createConnection("mongodb://kaimo313:kaimo313@localhost:27017/user", {useNewUrlParser: true,useUnifiedTopology: true
});
conn.on("connected", () => {console.log("链接成功");
});// 2、Schema 骨架,根据这个骨架来创建内容,用来规范文档的
let StudentSchema = new mongoose.Schema({username: {type: String,required: true},password: String,age: Number,birthday: {type: Date,default: Date.now}},{collection: "Student" // 设置固定的名字}
);// 3、通过骨架来创建模型 -> 集合 db.student.insert()
let Student = conn.model("Student", StudentSchema);// 4、模型可以操作数据
Student.create({username: "kaimo001",password: "kaimo001",test: "测试多余数据"
}).then((doc) => {console.log(doc);
});

启动

nodemon mongoose.js

在这里插入图片描述

在这里插入图片描述

新增改查,分页

const mongoose = require("mongoose");// 1、连接 mongodb
let conn = mongoose.createConnection("mongodb://kaimo313:kaimo313@localhost:27017/user", {useNewUrlParser: true,useUnifiedTopology: true
});
conn.on("connected", () => {console.log("链接成功");
});// 2、Schema 骨架,根据这个骨架来创建内容,用来规范文档的
let StudentSchema = new mongoose.Schema({username: {type: String,required: true},password: String,age: Number,birthday: {type: Date,default: Date.now},hobby: [String]},{collection: "Student" // 设置固定的名字}
);// 3、通过骨架来创建模型 -> 集合 db.student.insert()
let Student = conn.model("Student", StudentSchema);// 4、模型可以操作数据
(async () => {// 1) 批量插入:let arr = [];for (let i = 0; i < 4; i++) {arr.push({username: "kaimo" + i,password: "kaimo" + i,age: i});}let r1 = await Student.create(arr);console.log("批量插入----->", r1);// 2) 查询操作:findOne 是查询一个;find 是查询一组,查询的结果只采用某个几个字段// _id 比较特殊需要单独控制,username: 1, password: 1 表示显示该字段let r2 = await Student.findOne({ username: "kaimo1" }, { username: 1, password: 1 });// await Student.findById("652e81753e38c888970b3846");console.log("查询操作----->", r2);// 3) 修改操作 (查询条件,修改成的结果)// 修改所有年龄大于2的,年龄都加10// where 基本不用,性能差 ({$where: "age>2"})// 操作符:lt: 小于 gt:大于 lte:小于等于 lgt:大于等于 inc:递增let r3 = await Student.updateOne({ age: { $gt: 2 } }, { $inc: { age: 10 } });console.log("修改操作--r3--->", r3);// 加个字段,新增 setlet r4 = await Student.updateOne({ username: /kaimo1/ }, { $set: { password: "123456" } });console.log("修改操作--r4--->", r4);// 数组新增用 push,不重复添加用 addToSetlet r5 = await Student.updateOne({ username: /kaimo1/ }, { $push: { hobby: ["睡觉1", "睡觉2"] } });console.log("修改操作--r5--->", r5);// 多条件(or)删除(pop)数组第一个let r6 = await Student.updateOne({ $or: [{ username: /kaimo1/ }, { age: 1 }] }, { $pop: { hobby: -1 } });console.log("修改操作--r6--->", r6);// 4) 删除// Student.deleteOne(); Student.deleteMany();// 5) 分页查询let limit = 2; // 每页2条let currentPage = 2; // 当前是第2页let skip = (currentPage - 1) * limit;// find 返回的是一个游标,并不是一个结果;查询 -> 排序 -> 跳过 -> 限制let r7 = await Student.find({}).limit(limit).skip(skip).sort({ age: -1 });console.log("分页查询--r7--->", r7);
})();

连表查询

const mongoose = require("mongoose");// 1、连接 mongodb
let conn = mongoose.createConnection("mongodb://kaimo313:kaimo313@localhost:27017/user", {useNewUrlParser: true,useUnifiedTopology: true
});
conn.on("connected", () => {console.log("链接成功");
});// 学生模型
let StudentSchema = new mongoose.Schema({username: {type: String,required: true},password: String,age: Number,birthday: {type: Date,default: Date.now},hobby: [String]},{collection: "Student" // 设置固定的名字}
);let Student = conn.model("Student", StudentSchema);// 作业模型
let HomeWorkSchema = new mongoose.Schema({title: String,content: String,student: {ref: "Student",type: mongoose.SchemaTypes.ObjectId // 用户id}},{collection: "Homework" // 设置固定的名字}
);
let HomeWork = conn.model("Homework", HomeWorkSchema);(async () => {let user = await Student.create({ username: "kaimo666", password: "123456" });let home = await HomeWork.create({title: "第一篇作业",content: "第一篇作业的内容",student: user._id});console.log(home);// 连表查询let r = await HomeWork.findById("653538ed066785338ab72d81").populate("student", { username: 1 });console.log("连表查询--r-->", r);// 修改:通过模型来操作;通过文档自己操作自己r.title = "修改后的标题";await r.save();
})();

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

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

相关文章

城市正视图(Urban Elevations, ACM/ICPC World Finals 1992, UVa221)rust解法

如图5-4所示&#xff0c;有n&#xff08;n≤100&#xff09;个建筑物。左侧是俯视图&#xff08;左上角为建筑物编号&#xff0c;右下角为高度&#xff09;&#xff0c;右侧是从南向北看的正视图。 输入每个建筑物左下角坐标&#xff08;即x、y坐标的最小值&#xff09;、宽度…

Linux基础命令1——Linux的命令格式与命令分类

目录 Linux命令格式 Linux命令分类 如何判断命令的类型——Type命令 内置命令 外部命令 alias命令 命令的执行效率与过程 Linux命令格式 命令格式 完整的命令格式分为三部分&#xff1a;命令、参数、对象 其中命令与参数、参数与参数、参数与对象之间最少要有一个空格做…

有哪些比较好用的协同办公软件

在疫情期间&#xff0c;协同办公大放异彩&#xff0c;解决了很多公司线上办公的问题&#xff0c;所以在后疫情时代&#xff0c;协同办公软件成为了提高工作效率和团队协作的重要工具。 随着科技的不断进步&#xff0c;越来越多的协同办公软件涌现出来。在本文中&#xff0c;我们…

NFTScan | 10.16~10.22 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2023.10.16~ 2023.10.22 NFT Hot News 01/y00ts&#xff1a;迁移回以太坊的跨链桥已上线&#xff0c;将承担第一天所有 Gas 费 10 月 16 日&#xff0c;y00ts 发推称&#xff0c;将 y00…

k8s-----10、Controller-Deployment

Controller-Deployment 1、什么是controller2、 pod和controller关系3、Deployment控制器应用场景3.1 部署时yaml文件书写3.2 实际部署应用3.3 升级回滚3.3.1 升级3.3.2 回滚 3.4 弹性伸缩 1、什么是controller 在集群上管理和运行容器的对象 2、 pod和controller关系 pod是…

黑豹程序员-架构师学习路线图-百科:SpringBoot

文章目录 1、什么是SpringBoot&#xff1f;2、SpringBoot发展史3、为什么我们要使用SpringBoot 1、什么是SpringBoot&#xff1f; Spring Boot是一个用于创建独立的、基于Spring框架的Java应用程序的开源框架。 Spring Boot简化了Spring应用程序的开发和部署&#xff0c;使开发…

gulp打包vue3+jsx+less插件

最终转换结果如下 在根目录下添加gulpfile.js文件&#xff0c;package.json添加命令npm run gulp var gulp require(gulp) var babel require(gulp-babel) var less require(gulp-less) var del require(del); var spawn require(child_process).spawn;const outDir &…

VS Code C# 开发工具包正式发布

前言 微软于本月正式发布Visual Studio Code C#开发工具包&#xff0c;此前该开发套件已经以预览版的形式在6月份问世。经过4个月的测试和调整&#xff0c;微软修复了350多个问题&#xff0c;其中大部分是用户反馈导致的问题。此外&#xff0c;微软还对产品进行了300多项有针对…

unity脚本_力 c#

创建一个脚本 将代码挂载到物体上 取消物体的重力 运行即向z轴运动 加力之后 是否停止是由阻力影响 如果阻力为零 则会一直运动 如果希望就算有阻力也让物体一直动就将加力代码放在Update函数里 using UnityEngine; public class Power : MonoBehaviour{ Rigidbody rigidBo…

头脑风暴之约瑟夫环问题

一 问题的引入 约瑟夫问题的源头完全可以命名为“自杀游戏”。本着和谐友爱和追求本质的目的&#xff0c;可以把问题描述如下&#xff1a; 现有n个人围成一桌坐下&#xff0c;编号从1到n&#xff0c;从编号为1的人开始报数。报数也从1开始&#xff0c;报到m人离席&#xff0c…

Java面试——RPC协议

涉及到分布式方面知识的话&#xff0c;RPC协议是逃不开的&#xff0c;所以在此记录一下RPC协议。 什么是RPC协议 RPC协议&#xff08;Remote Procedure Call&#xff09;远程过程调用&#xff0c;简单的来说&#xff1a;RPC协议是一种通过网络从远程计算机程序获取服务的协议…

cocos creator 小游戏允许他人访问本地项目

需求背景&#xff1a; 发版成微信小游戏前&#xff0c;需要策划介入体验。不上传微信体验版本 实现&#xff1a; 1.发布平台选择web桌面端 2.构建完成后点击运行从浏览器上获取本地的运行地址 3.winR ——》 cmd 控制台 输入 ipconfig 找到IPv4地址&#xff0c;替换本地部分 …