【MongoDB】MongoDB 的介绍和使用

1. 关系型与非关系型数据库

关系型数据库(RDBMS)和非关系型数据库(NoSQL)是两种不同类型的数据库管理系统。

关系型数据库是基于关系模型的数据库。它使用表(关系)来保存数据,并且通过事先定义的结构(表的列)和关系(表之间的关联)来组织数据。关系型数据库使用SQL(结构化查询语言)作为查询和操作数据的标准语言,例如常见的MySQL、Oracle、SQL Server等。

非关系型数据库则是一种灵活的数据存储方式,不使用表、行、列的结构。它们可以存储各种不同类型的数据,包括文档、键值对、列族等。非关系型数据库通常以键值对(例如Redis)或者文档(例如MongoDB)的形式储存数据。这些数据库的设计目标通常是在大规模数据的读写上提供高性能和可扩展性。

关系型数据库和非关系型数据库在以下几个方面有所区别:

  1. 数据结构:关系型数据库使用表格和SQL来存储和查询数据,而非关系型数据库使用各种不同的数据结构,如键值对、文档或者列族。
  2. 数据一致性:关系型数据库通常支持事务处理,保证数据的一致性和完整性,而非关系型数据库则更注重分布式、高性能的读写操作。
  3. 可扩展性:非关系型数据库通常更容易水平扩展,可以在需要时添加更多的服务器以满足系统的需求,而关系型数据库在扩展性方面相对不足。
  4. 数据库处理方式:关系型数据库采用结构化查询语言(SQL)进行操作和查询,而非关系型数据库更注重API的灵活性和数据的快速存取。

2. MongoDB 基本介绍

MongoDB是一种非关系型数据库,采用文档导向的数据存储方式,通过JSON-like的文档结构来存储数据。

以下是MongoDB的一些特点:

  1. 非关系型数据库:MongoDB使用集合(Collection)来存储和组织数据,集合类似于关系型数据库中的表,但没有固定的结构,不需要事先定义表结构即可存储数据。

  2. 文档导向:MongoDB使用文档(Document)来表示数据记录,文档是一个包含键值对的数据结构,类似于关系数据库中的行,但文档可以具有非常灵活的结构,因此非常适合存储半结构化和非结构化数据。

  3. 强大的查询语言:MongoDB提供灵活和强大的查询语言,支持基本的查询操作,包括条件过滤、排序、投影等,也支持复杂的聚合查询、文本搜索和地理空间查询等。

  4. 高性能和可扩展性:MongoDB被设计为高性能和可扩展的数据库,它采用的是基于内存的数据访问模式,具有快速的读写能力。此外,MongoDB还支持水平扩展,可以通过分片技术将数据分布到多个服务器上,以提高系统的吞吐量和负载能力。

  5. 自动故障恢复:MongoDB具备自动故障恢复的功能,它能够在节点崩溃或网络中断的情况下自动恢复,并保持数据的一致性。

  6. 灵活的数据复制和分发:MongoDB支持数据复制和分发,可以通过复制集(Replica Set)来提高数据的可用性和容错性,也可以通过分片技术来进行数据的水平划分和负载均衡。

总的来说,MongoDB是一种强大、灵活、高性能和可扩展的非关系型数据库,适用于需要灵活数据结构、高性能读写、复制和分发数据的场景。它广泛应用于互联网应用、大数据分析、实时数据处理等领域。

在这里插入图片描述

3. MongoDB 的使用

3.1 安装

安装地址

3.2 启动

在 mongod.exe 所在的 bin 文件夹内打开终端(将服务端开启并连接到某个 db 文件夹下):

.\mongod.exe --dbpath=D:\data\db

安装 mongosh ,执行 mongosh.exe 文件,连接到本地数据库端口,开启客户端。(当然也可以利用可视化工具连接)

3.3 操作

在这里插入图片描述

4. Node.js 连接操作 MongoDB

  1. 连接数据库
const mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/xx_project')
  1. 创建模型
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const UserType = {username: String,password: String,age: Number
}const UserModel = mongoose.model('user', new Schema(UserType));
module.exports = UserModel;
  1. 增删改查
var express = require('express');
var router = express.Router();
const UserModel = require('../models/user');/* GET users listing. */
router.get('/', function (req, res, next) {res.send('respond with a resource');
});router.post('/user/add', (req, res) => {console.log(req.body)// 插入数据库// 1. 创建一个模型const { username, password, age } = req.body;UserModel.create({username,password,age}).then(data => {console.log(data)})res.send({ok: 1})
})router.post('/user/update/:id', (req, res) => {console.log(req.body, req.params.id)const { username, password, age } = req.body;UserModel.updateOne({ _id: req.params.id }, {username,password,age}).then(data => {res.send({ok: 1})})})
router.get('/user/delete/:id', (req, res) => {console.log(req.params.id)UserModel.deleteOne({ _id: req.params.id }).then(data => {res.send({ok: 1})})
})router.get('/user/find', (req, res) => {UserModel.find().sort({age:-1}).then(data => {res.send(data)})
})module.exports = router;

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

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

相关文章

SpringCloud: sentinel热点参数限制

一、定义controller package cn.edu.tju.controller;import com.alibaba.csp.sentinel.annotation.SentinelResource; import com.alibaba.csp.sentinel.slots.block.BlockException; import org.springframework.web.bind.annotation.PathVariable; import org.springframewo…

STM32如何使用PWM?

一:PWM介绍 PWM 是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调制,简 称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有 效的技术,其控制简单、灵活和动态响应好等优点而成为电力电子技术最广…

Layui 主窗口调用 iframe 弹出框模块,获取控件的相应值

var iframeWindow window[layui-layer-iframe index]; iframeWindow.layui.tree............(这里就可以操作tree里面的内容了)。var chrild layero.find(iframe).contents(); chrild.layui.tree (这样是调用不到的)。var child layer.getChildFrame(); child.layui.tree(这…

外置告警蜂鸣器使用小坑

告警蜂鸣器调试小坑 昨天调试新产品,由于IMO、MSC组织和IEC标准规定,不能使用带红色指示灯的蜂鸣器,于是更换了个不带灯。然而奇怪的现象出现了两次短响的程序在有的页面正常,有的页面就变成一声了。搞了一天,把各种寄…

解决 Windows 7 激活信息失败报错 0xC004F057

文章目录 步骤一:以管理员身份运行命令提示符步骤二:卸载当前密钥信息步骤三:清除产品密钥信息步骤四:重新启动 Windows Activation Technologies 服务步骤五:重启电脑 🎉解决 Windows 7 激活信息失败报错 …

字符串排序程序

字符串排序程序,对一个字符串中的数值进行从小到大的排序 例如排序前给定的字符串为" 20 78 9 -7 88 36 29" 排序后: -7 9 20 29 36 78 88 要求使用包装类对数值类型的字符串转换成整型进行排序。 public class StringSort {public static vo…

YOLOv5-理论部分

YOLOv5 作者: Ultralytics 论文源码: https://github.com/ultralytics/yolov5 Ultralytics:“超视觉技术” / “超视觉系统” 0. 引言 “YOLOv5 🚀 是世界上备受喜爱的视觉人工智能,代表了 Ultralytics 对未来视觉人工智能方法的开源研究&a…

Confluence 内容管理

1.创建页面 功能入口: Confluence →指定空间→创建 功能说明: (1)为保证页面风格统一,建议各类内容应统一选择对应模板创建 (2)页面应配置可查看用户,以及用户编辑、查看权限 …

《golang设计模式》第三部分·行为型模式-01-责任链模式(Chain of Responsibility)

文章目录 1 概念1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1 概念 责任链(Chain of Responsibility)是指将客户端请求处理的不同职责对象组成请求处理链。 客户端只需要将请求交付到该链上,而不需要关心链上含有哪些对象。请求…

Hadoop3教程(十五):MapReduce中的Combiner

文章目录 (103)Combiner概述什么是CombinerCombiner有什么用处Combiner有什么特点如何自定义Combiner (104)Combiner合并案例实操如何从日志里查看Combiner如果不存在Reduce阶段,会发生什么自定义Combiner的两种方式 参…

论文阅读:Point-to-Voxel Knowledge Distillation for LiDAR Semantic Segmentation

来源:CVPR 2022 链接:https://arxiv.org/pdf/2206.02099.pdf 0、Abstract 本文解决了将知识从大型教师模型提取到小型学生网络以进行 LiDAR 语义分割的问题。由于点云的固有挑战,即稀疏性、随机性和密度变化,直接采用以前的蒸馏…

正点原子嵌入式linux驱动开发——设备树下LED驱动

经过对设备树的学习以及驱动开发中常用的OF函数介绍,本篇笔记将之前的新字符设备驱动的LED,换成设备树形式。 设备树LED驱动原理 在之前的新字符设备驱动实验中,直接在驱动文件newchrled.c中定义有关寄存器物理地址,然后使用io_…

Groovy语法Gradle配置学习笔记

第一部分:Groovy语法 变量的类型和定义 Groovy所有类型都是对象类型: int x 10 println x.class double y 3.14 println y.classdef 定义变量: def str "dddd" println str.class字符串 字符串: // 单引号 双引号…

el-input: 把不符合正则校验的值动态清空,只保留符合的值

<el-input v-model"form.profit" placeholder"请输入授权专利新增利润" input"handleInput" clearable />/*** 不符合正则校验,清空*/const handleInput () > {if (form.value.profit) {if (!/^\d*\.?\d*$/.test(form.value.profit))…

基于STM32_DHT11单总线温湿度传感器驱动

基于STM32_DHT11单总线温湿度传感器驱动 文章目录 基于STM32_DHT11单总线温湿度传感器驱动前言一、DHT11&#xff1f;二、原理1.时序1.主机复位信号和 DHT11 响应信号2.信号‘0’的表示3.信号‘1’的表示4.整个数据信号收发流程 2.数据结构 三、驱动1 .h文件&#xff1a;2 .c文…

CSS 笔记/练习

CSS 概述 与 html 配合&#xff0c;实现内容与样式分离样式美化 标签中元素作用 class&#xff1a;class属性用于为元素指定一个或多个样式类。通过为元素添加class属性&#xff0c;可以将其与CSS样式表中的样式规则关联起来&#xff0c;从而改变元素的外观和行为。一个元素可…

网络工程师知识点7

111、IS-IS路由器的三种类型&#xff1f; Level-1路由器&#xff08;只能创建level-1的LSDB&#xff09; Level-2路由器&#xff08;只能创建level-2的LSDB&#xff09; Level-1-2路由器&#xff08;路由器默认的类型&#xff0c;能同时创建level-1和level-2的LSDB&#xff09;…

0基础学习VR全景平台篇第109篇:认识拼接软件PTGui Pro

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01;今天给大家讲解我们全景后期拼接软件PTgui pro&#xff0c;下面我们开始吧&#xff01; &#xff08;PTgui pro软件课程大纲&#xff09; 1.PTGui这个软件是什么 发明人 &#xf…

公司如何防止源代码外泄,保护开发部门代码安全呢?

在智能制造业中&#xff0c;研发人员的开发环境&#xff0c;大多数采用c#开发语言svn 或c#git进行软件系统的开发&#xff0c;但是c#语言如何来防泄密保护呢&#xff1f;德人合科技针对于制造类企业制定了安全稳定的源代码防泄密方案&#xff0c;不影响员工的正常工作&#xff…

【数字图像处理笔记】01-数字图像基础

01-数字图像基础 图像类型 黑白(二值)图像 只有黑白两种颜色的图像称为黑白图像或单色图像&#xff0c;图像的每个像素只能是黑或白&#xff0c;没有中间的过渡&#xff0c;故又称为二值图像。 二值图像的像素值只能为0或1&#xff0c;图像中的每个像素值用1位存储。图像矩阵中…