Node.js对MongoDB进行增删改查操作

MongoDB简介

MongoDB是一个开源的、文档型的NoSQL数据库程序。MongoDB将数据存储在类似JSON的文档中,操作起来更灵活方便。NoSQL数据库中的文档(documents)对应于SQL数据库中的一行。将一组文档组合在一起称为集合(collections),它大致相当于关系数据库中的表。

除了作为一个NoSQL数据库,MongoDB还有一些自己的特性:

  • 易于安装和设置
  • 使用BSON(类似于JSON的格式)来存储数据
  • 将文档对象映射到应用程序代码很容易
  • 具有高度可伸缩性和可用性,并支持开箱即用,无需事先定义结构
  • 支持MapReduce操作,将大量数据压缩为有用的聚合结果
  • 免费且开源
  • ......

连接MongoDB

在Node.js中,通常使用Mongoose库对MongoDB进行操作。Mongoose是一个MongoDB对象建模工具,设计用于在异步环境中工作。

const mongoose = require('mongoose');mongoose.connect('mongodb://localhost/playground').then(() => console.log('Connected to MongoDB...')).catch( err => console.error('Could not connect to MongoDB... ', err));

Schema

Mongoose中的一切都始于一个模式。每个模式都映射到一个MongoDB集合,并定义该集合中文档的形状。
Schema类型

const courseSchema = new mongoose.Schema({name: String,author: String,tags: [String],date: {type: Date, default: Date.now},isPublished: Boolean
});

Model

模型是根据模式定义编译的构造函数,模型的实例称为文档,模型负责从底层MongoDB数据库创建和读取文档。

const Course = mongoose.model('Course', courseSchema);
const course = new Course({name: 'Nodejs Course',author: 'Hiram',tags: ['node', 'backend'],isPublished: true
});

新增(保存)一个文档

async function createCourse(){const course = new Course({name: 'Nodejs Course',author: 'Hiram',tags: ['node', 'backend'],isPublished: true});const result = await course.save();console.log(result);
}createCourse();

查找文档

async function getCourses(){const courses = await Course.find({author: 'Hiram', isPublished: true}).limit(10).sort({name: 1}).select({name: 1, tags:1});console.log(courses);
}
getCourses();

使用比较操作符

比较操作符

async function getCourses(){const courses = await Course// .find({author: 'Hiram', isPublished: true})// .find({ price: {$gt: 10, $lte: 20} }).find({price: {$in: [10, 15, 20]} }).limit(10).sort({name: 1}).select({name: 1, tags:1});console.log(courses);
}
getCourses();

使用逻辑操作符

  • or (或) 只要满足任意条件
  • and (与) 所有条件均需满足
async function getCourses(){const courses = await Course// .find({author: 'Hiram', isPublished: true}).find()// .or([{author: 'Hiram'}, {isPublished: true}]).and([{author: 'Hiram', isPublished: true}]).limit(10).sort({name: 1}).select({name: 1, tags:1});console.log(courses);
}
getCourses();

使用正则表达式

async function getCourses(){const courses = await Course// .find({author: 'Hiram', isPublished: true})//author字段以“Hiram”开头// .find({author: /^Hiram/})//author字段以“Pierce”结尾// .find({author: /Pierce$/i })//author字段包含“Hiram”.find({author: /.*Hiram.*/i }).limit(10).sort({name: 1}).select({name: 1, tags:1});console.log(courses);
}
getCourses();

使用count()计数

async function getCourses(){const courses = await Course.find({author: 'Hiram', isPublished: true}).count();console.log(courses);
}
getCourses();

使用分页技术

通过结合使用 skip()limit() 可以做到分页查询的效果

async function getCourses(){const pageNumber = 2;const pageSize = 10;const courses = await Course.find({author: 'Hiram', isPublished: true}).skip((pageNumber - 1) * pageSize).limit(pageSize).sort({name: 1}).select({name: 1, tags: 1});console.log(courses);
}
getCourses();

更新文档

先查找后更新

async function updateCourse(id){const course = await Course.findById(id);if(!course) return;course.isPublished = true;course.author = 'Another Author';const result = await course.save();console.log(result);
}

直接更新

async function updateCourse(id){const course = await Course.findByIdAndUpdate(id, {$set: {author: 'Jack',isPublished: false}}, {new: true}); //true返回修改后的文档,false返回修改前的文档console.log(course);
}

MongoDB更新操作符,请参考:https://docs.mongodb.com/manual/reference/operator/update/

删除文档

  • deleteOne 删除一个
  • deleteMany 删除多个
  • findByIdAndRemove 根据ObjectID删除指定文档
async function removeCourse(id){// const result = await Course.deleteMany({ _id: id});const course = await Course.findByIdAndRemove(id);console.log(course)
}

转载于:https://www.cnblogs.com/hiramP/p/10724945.html

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

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

相关文章

【操作系统复习】操作系统的发展与分类

同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 操作系统的发展与分类一、手工操作阶段二、批处理阶段 —— 单道批处理系统三、批处理阶段 —— 多道批处理系统四、分时操作系统五、实时操作系统六、其他操作系统一、手工操作阶段 过程&#xf…

诺奖得主本庶佑:CNS这些顶刊观点有九成不正确,不要盲从迷信,搞科研做到六个C更重要...

来源:科研大匠整理翻译:思庐哲学诺奖可说是国人心中一直的痛。目前,在诺贝尔奖获奖国家中,美国堪称当之无愧的领头羊。截止发文,美国人已经获得了384枚诺贝尔奖!因此,近代以来,我们一…

常见面试题

python题 1.类方法(classmethod):1.在python中.类方法 classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法。 类方法的第一个参数cls,而实例方法的第一个参数是…

详解2021诺贝尔物理学奖:他们破译了地球气候及其他复杂系统的隐秘规律

来源:环球科学封面图来源:cjdrexel, CC PDM 1.010 月 5 日北京时间 17 时 45 分许,2021 年诺贝尔物理学奖被授予“对我们理解复杂系统的开创性贡献”,一半授予真锅淑郎(Syukuro Manabe)和克劳斯哈塞尔曼&am…

shark恒破解笔记3-EAX决定胜负

PEID查壳 od载入 输入假的注册码 查找出错字符串 往上查找是否有关键跳转和关键call 可以看到此处有个je跳转 实现了跳转,并且跳过了我们注册成功的地址 网上查找这个跳转的关键call,这个call很有可能就是判断一系列注册码是否正确然后返回一个代表是否注…

中国智能建造关键领域技术发展的战略思考!

来源:我国智能建造关键领域技术发展的战略思考[J].中国工程科学,2021,23(4):64-70.作者:陈珂,丁烈云 中国工程院丁烈云院士科研团队在中国工程院院刊《中国工程科学》2021年第4期撰文,阐述了智能建造的基本概念与重要性&#xff0…

Java常用的一些容器

转自:https://www.cnblogs.com/LipeiNet/p/5888513.html 前言:在java开发中我们肯定会大量的使用集合,在这里我将总结常见的集合类,每个集合类的优点和缺点,以便我们能更好的使用集合。下面我用一幅图来表示 其中淡绿色…

图灵奖得主杨立昆:AI+时代,未来将会如何被改变

来源:杨立昆《科学之路:人,机器与未来》编辑:蒲蒲人工智能(AI)近年来的发展可以说包罗万象,几乎涵盖了所有与机器智能化相关的内容。无论是机器人、冰箱、汽车还是软件应用,只要你想…

基于IMAGE法的房间回响模型创建、C++代码实现、matlab仿真

基于IMAGE法的房间回响模型创建、C代码实现、matlab仿真1.模型简介 \qquad在处理声音信号时,我们要对信号先进行采集。那么我们就必须要有,一个发出声音的声源,一个进行声音采集的传感器。并且这两者一般都位于房间之中,处于房间内…

花落有机化学!诺贝尔化学奖不再是“理综奖”

来源:学术头条北京时间 2021 年 10 月 6 日下午 5 点 50 分,2021 年诺贝尔化学奖重磅公布,德国马普煤炭研究所所长 Benjamin List、普林斯顿大学化学教授 David W.C. MacMillan 获奖,以表彰他们对“不对称有机催化做出的贡献”。关…

牛客 16499 解方程 (数学、Python)

同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 链接:https://ac.nowcoder.com/acm/problem/16499 来源:牛客网 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 131072K,其他语…

美军认知技术发展态势

来源:人机与认知实验室摘要:美军正在大力发展人工智能中的认知技术,认知技术的进步将极大的促进人机融合智能的发展。首先,综述了美军认知技术的发展历史,从自然语言处理、环境感知、机器人自主控制、自主编组协调、人…

正则表达式写验证器

package com.office.utility;import java.util.regex.Pattern;/*** 校验器:利用正则表达式校验用户名、密码、邮箱、手机号等* author liujiduo*/ public class Validator {/*** 正则表达式:验证用户名*/public static final String REGEX_USERNAME &qu…

【操作系统复习】中断和异常

同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 中断和异常一、中断机制的诞生二、中断的概念和作用三、中断的分类四、外中断的处理过程一、中断机制的诞生 💁 早期的计算机:各程序只能串行执行,系统资源利用…

东南亚的招聘骗局,程序员请注意!

阅读本文大概需要 5.2 分钟。 总有些我认为是常识的事情,在别人看来都是第一次接触。很多骗局都是如此,圈内人不上当,圈外人不警惕。毕竟骗子吃的就是信息不对称的生意。关于东南亚的招聘骗局,便是如此。 他们当前主力针对的是程序…

2021年深度学习哪些方向比较有研究潜力?

来源:知乎问答作者:陀飞轮、Zhifeng、谢凌曦转自:极市平台深度学习成为近些年来较为热门的领域,算法工程师这一岗位也变得越发的抢手,尽管已经踏入了这一领域但对整体的大环境其实是还不能够准确的把握。从研究方向去看…

视觉感知与认知

2. 视觉感知与认知 2. 视觉感知与认知2.1 感知与认知2.1.1 视觉感知处理过程2.1.2 格式塔理论2.1.2.1 贴近法则 (proximity)2.1.2.2 相似法则 (similarity)2.1.2.3 连续原则 (continuity)2.1.2.4 闭合原则 (closure)2.1.2.5 共势原则 (common fate)2.1.2.6 好图原则 (good figu…

高文:拥抱人工智能

转自:《中国信息化周报》2020年40期本文根据中国工程院院士高文公开演讲整理而成,未经本人确认高文,中国工程院院士什么叫人工智能呢?人工智能是人类智能的一个计算机的实现,从对决的角度,它永远不可能超过…

3.6数对 (Python)

链接:https://ac.nowcoder.com/acm/contest/12478/C 来源:牛客网 时间限制:C/C 2秒,其他语言4秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 在3月6日,作为队内数…

互联网大脑的发育与元宇宙的兴起

2021年10月2日,《互联网大脑的发育与元宇宙的兴起》是远望智库数字大脑研究院院长刘锋博士受奇点O论坛的邀请所做的一个发言,从互联网大脑模型的发育角度,探讨了元宇宙兴起的原因和规律,同时对元宇宙面临的问题和对产业的影响进行…