【MongoDB】MongoDB 的介绍和使用

news2025/1/25 9:25:25

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.coloradmin.cn/o/1094413.html

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

相关文章

雷电模拟器上使用第一个frida(一)之安装

环境:win10 64,雷电模拟器9.0.60(9),Android 9,本机Python 3.10.4,路径: python3路径 cd C:\Users\LC\AppData\Local\Programs\Python\Python310pip3路径 cd C:\Users\LC\AppData\Local\Programs\Python\P…

草莓病害图像数据集(YOLO使用,train为655张照片和val为487张照片)

前言:所有图像和标签是一一对应,没有标签缺失 写了两个程序来分别检查train文件夹的图像和val文件夹图像是否有缺失标签,如果有,会直接打印出缺失标签的图像名字。也方便以后用户自己添加自己收集的图像数据后,核对图…

NNDL:作业3:分别使用numpy和pytorch实现FNN例题

对比【numpy】和【pytorch】程序,总结并陈述。 激活函数Sigmoid用PyTorch自带函数torch.sigmoid(),观察、总结并陈述。 激活函数Sigmoid改变为Relu,观察、总结并陈述。 损失函数MSE用PyTorch自带函数 t.nn.MSELoss()替代,观察、总…

软件工程与计算总结(十二)详细设计的基础

目录 一.详细设计概述 1.出发点 2.上下文 二.结构化设计 1.思想 2.过程 三.面向对象设计 1.思想 2.过程 3.通过职责建立静态模型 4.通过协作建立动态模型 四.为类间协作开发集成测试用例 五.详细设计文档描述 六.详细设计的评审 一.详细设计概述 1.出发点 详细…

Java前后端交互实现班级管理(查询)

1,数据库创建存储专业信息的表 2,后端: 连接数据库工具类DBUtil.java: package com.ffyc.webserver.util;import java.sql.*;public class DButils {static {try {Class.forName("com.mysql.cj.jdbc.Driver");} catch…

施耐德Unity通过Modbus控制变频器

硬件设备 PLC: Unity Premium (CPU:TSX P57154) 通讯卡: TSX SCP 114 连接电缆: TSX SCP CM 4030 VSD: ATV 58 硬件连接 Unity Premium (CPU: TSX P57154)本身不带Modbus接口,因此,采用TSX SCP 114扩展一个Modbus接口。TSX SCP 114是一个RS-485接…

java集合之Collection接口体系

一、集合概述 java集合框架标准化了程序处理对象组的方式,它是在J2SE 1.2版本时增加的。 在集合框架之前,Java提供了特定的类来存储和管理对象组,如Dictionary、Vector、Stack、Properties。尽管这些类很有用,但是缺少了集…

甲醇燃料电池(DMFC) 系统

甲醇燃料电池(DMFC) 系统框图 ~~

宅在家里也能干的副业,每天挣60—300元,人人可做

想在家搞副业,每天挣60-300元,大家觉得难吗?我告诉你,一点也不难。找对路子,足不出户也能搞钱。今天我就给大家分享一下三个网上靠谱的副业,门槛低上手快,只需一部手机,每天利用碎片…

【Java每日一题】— —第三十一题:银行账号管理程序设计(2023.10.15)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

Elasticsearch系列组件:Kibana无缝集成的数据可视化和探索平台

Elasticsearch 是一个开源的、基于 Lucene 的分布式搜索和分析引擎,设计用于云计算环境中,能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。它具有高度的可扩展性,可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个…

Java课程设计——图书管理系统

文章目录 一、需求分析二、技术介绍2.1相关技术2.2开发环境 三、功能实现1、登录2、图书管理2.1图书列表2.2添加图书2.3修改图书信息2.4查询图书信息 3、用户管理3.1借阅图书3.2修改借阅信息3.3归还图书 4、退出系统 四、部分代码实现获取源码 文章最下方获取源码!&…

【Retinex theory】【图像增强】-笔记

1 前言 retinex 是常见的图像增强的方法,retinex 是由两个单词合成的:retina conrtex ,即视网膜皮层。 2 建立的基础 Land 的 retinex theory 建立在三个假设之下: 真实世界是无色的,我们所谓的颜色是光和物质相互…

VARMA模型的原理与实现

文章目录 1.多变量模型的基本思想2.VAR模型与VARMA模型3.VARMA模型的实现 1.多变量模型的基本思想 ​ 在现实和竞赛中,时序数据往往是多变量时间序列,我们往往需要借助除了时间之外的变量的帮助来完成预测。比如,如果我们需要预测居民消费支…

数据结构与算法--其他算法

数据结构与算法--其他算法 1 汉诺塔问题 2 字符串的全部子序列 3 字符串的全排列 4 纸牌问题 5 逆序栈问题 6 数字和字符串转换问题 7 背包问题 8 N皇后问题 暴力递归就是尝试 1,把问题转化为规模缩小了的同类问题的子问题 2,有明确的不需要继续…

yolov5+车辆重识别【附代码】

本篇文章主要是实现的yolov5和reid结合的车辆重识别项目。是在我之前实现的yolov5_reid行人重识别的代码上修改实现的baseline模型。 目录 相关参考资料 数据集说明 环境说明 项目使用说明 vehicle reid训练 yolov5车辆重识别 从视频中获取想要检测的车(待检测车辆) 车…

Attention Is All You Need原理与代码详细解读

文章目录 前言一、Transformer结构的原理1、Transform结构2、位置编码公式3、transformer公式4、FFN结构 二、Encode模块代码解读1、编码数据2、文本Embedding编码3、位置position编码4、Attention编码5、FFN编码 三、Decode模块代码解读1、编码数据2、文本Embedding与位置编码…

centos6/7 SOCKS5 堆溢出漏洞修复(RPM方式)curl 8.4 CVE-2023-38545 CVE-2023-38546

引用 https://darkdark.top/update-curl.html centos6 rpm 升级包下载:https://download.csdn.net/download/sinat_24092079/88425840 yum update libcurl-8.4.0-1.el6.1.x86_64.rpm curl-8.4.0-1.el6.1.x86_64.rpmcentos7 rpm 升级包下载:https://down…

ELF和静态链接:为什么程序无法同时在Linux和Windows下运行?

目录 疑问 编译、链接和装载:拆解程序执行 ELF 格式和链接:理解链接过程 小结 疑问 既然我们的程序最终都被变成了一条条机器码去执行,那为什么同一个程序,在同一台计算机上,在 Linux 下可以运行,而在…

Linux | 关于入门Linux你有必要了解的指令

目录 前言 1、ls指令 2、pwd指令 3、cd指令 4、touch指令 5、stat指令 6、mkdir指令 7、rmdir 与 rm指令 8、man指令 9、cp指令 10、mv指令 11、cat指令 (1)输入重定向 (2)输出重定向与追加重定向 12、less指令 1…