node中的数据持久化之mongoDB

news2024/11/15 15:49:54

一、什么是mongoDB

MongoDB是一种开源的非关系型数据库,正如它的名字所表示的,MongoDB支持的数据结构非常松散,是一种以bson格式(一种json的存储形式)的文档存储方式为主,支持的数据结构类型更加丰富的NoSQL数据库。它是一种介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB主要用于处理大量的数据存储。很多时候 MongoDB 用于实现那些由于使用类似 MySQL的关系型数据库而困难的大尺度、高性能、灵活模式的数据库。

MongoDB的主要特点有:

  1. 面向集合存储:适合存储对象及JSON类型数据,数据模型可变。
  2. 动态模式:MongoDB不需要预定义结构,如SQL数据库那样需要先定义表,再进行插入操作。你可以自由地在集合中插入数据,无需先定义文档结构。
  3. 支持丰富的查询操作
  4. 支持索引:任何一个MongoDB集合文件可以建立索引。
  5. 支持自动分片:自动云存储。
  6. 使用高效的二进制数据存储,包括了大型对象(比如视频等)。
  7. 支持复制和故障恢复
  8. 支持 Map/Reduce 和聚合工具

MongoDB的应用场景
MongoDB是一种非关系型数据库,它为现代应用程序提供了规模化、灵活和详细的数据模型及综合特性。以下是一些MongoDB的应用场景。

  1. 内容管理系统
    在为内容管理系统(CMS)设计数据模型时,因为内容、评论、修订历史、标签和其它元数据的异质性和大小的巨大差异,所以非结构化数据库如MongoDB特别适合这种用途。

  2. 实时数据分析
    MongoDB为开发者提供了许多内置的函数,使得他们可以部分地或者完全地在数据库级别完成对大数据的实时处理。

  3. 物联网
    MongoDB可以高效的处理和分析来自于传感器以及智能设备的大量数据,凭借其地理位置查询的功能,mongodb成为物联网的一个常用数据库。

  4. 移动应用
    MongoDB支持多种数据格式,灵活的数据模型和分片功能,使得在移动应用中可以轻易应对快速发布新版本。

  5. 游戏开发
    MongoDB提供了对大量用户数据的存储和处理能力,并且具有十分高的扩展性,可以很好地应对游戏数据的爆发式增长。

  6. 个性化推荐
    MongoDB可以存储大量的用户数据,包括点击数据、购买数据以及其他在线行为数据,这些都是进行个性化推荐的基础。

以下是一个实际应用案例
MetLife(美国人寿保险公司)使用MongoDB开发了一款名叫“The Wall”的应用程序,这款应用可以将用户的碎片化信息汇总到一块 "墙"上。这些信息包括但不仅限于保单信息、索赔状态、保费、家庭成员资料等等一系列可能来自于不同来源(SQL或者是NoSQL)的数据。

二、mongoDB的下载与安装

mongodb管网:https://www.mongodb.com/

在这里插入图片描述

1. 进入官网之后打开文档

在这里插入图片描述

2. 找到install介绍

在这里插入图片描述

3. 根据自己的系统安装对应的版本

这里介绍一下在windows下如何安装。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下载之后,双击运行根据提示安装就行了。

配置环境变量

安装完成之后我们打开shell命令窗口,输入:mongo
在这里插入图片描述
如图:提示没有这个命令,这时我们需要配置一下mongodb的执行环境变量

我的电脑->属性->高级系统设置->环境变量->path
在这里插入图片描述
如图,这样在path下配置一下就可以了,
我们再次打开shell,输入mongo
在这里插入图片描述
这样就成功啦。

三、mongoDB可视化工具介绍

1. MongoDB Compass

在这里插入图片描述
在这里插入图片描述
这个工具是你用mis方式安装时,mongoDB官方自带的可视化工具
在这里插入图片描述

2. Navicat Premium

Navicat官网:https://www.navicat.com.cn/
在这里插入图片描述
在这里插入图片描述
这款工具功能很强大,支持很多数据库的可视化,我们选择连接,点击MongoDB.
在这里插入图片描述
点击新建查询,输入show dbs查看系统默认的数据库
在这里插入图片描述

3. MongoDB for VS Code

在这里插入图片描述
去插件市场安装以后,点击connect连接
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、mongodb常用命令

命令描述
db.help()显示数据库操作命令,如createCollection(name, options)、dropDatabase()等。
db..help()显示集合操作命令,如db..find().help()、db..drop()等。
show dbs显示数据库列表。
use <db_name>切换当前数据库到<db_name>。如果数据库不存在,会创建新的数据库。
show collections显示当前数据库中的集合(相当于关系数据库中的表)。
db.createCollection(name, options)创建集合。
db.collection.insert()插入数据。
db.collection.find()查询数据。
db.collection.update()更新数据。
db.collection.remove()删除数据。
db.collection.drop()删除集合。
db.collection.createIndex(keys, options)创建索引。
db.collection.dropIndex(name)删除索引。
db.collection.getIndexes()列出所有索引。
db.collection.count()计算集合中的文档数。
db.collection.aggregate(pipeline)对集合中的文档进行各种形式的聚合操作。
db.runCommand(cmd)运行数据库命令。

这些是常用的一些Mongodb命令,具体使用可以参考Mongodb的文档说明。

1. 对集合数据的增删改查

在MongoDB中,对集合数据的增删改查(CRUD)操作可以通过db.collection.find(), .insert(), .update(), .delete()方法执行。假设我们有一个叫做"user"的集合,包含"Name"和"Age"的字段。

查询
我们可以使用.find()方法来查询数据。例如,你可以通过以下方式来查找所有用户:

db.user.find({})

这将列出所有的用户。

如果你想查找特定的用户,你可以添加查询条件,如下所示:

db.user.find({"name" : "Alice"})

该查询将列出名字为Alice的所有用户。

插入
你可以使用.insert()方法插入数据。例如,你可以通过以下方式插入一个新的用户:

db.user.insert({"name" : "Bob", "age" : 30})

这将在集合中创建一个新用户,名为Bob,年龄30。

更新
对于更新,我们使用.update()方法。例如,我们可以更新名为Alice的用户的年龄,如下所示:

db.user.update({"name" : "Alice"}, {$set : {"age" : 25}})

在上面的例子中,第一个对象是我们想要更新的用户的查询条件,第二个对象是我们想要更改的字段和新值。

删除
删除数据可以使用.remove()方法。例如,我们可以删除名为Bob的用户,如下所示:

db.user.remove({"name" : "Bob"})

以上就是如何在MongoDB中对一个集合中的数据进行增删改查操作。

五、node中连接mongoDB

1. 使用mongodb连接

连接MongoDB数据库是Node.js应用程序很常见的一种需求。我们可以通过使用第三方包mongodb来实现这一点。在开始之前,确保你的系统上已经安装了mongodbnode.js,而且`mongodb``服务器已经运行。

下面是一个详细的步骤:

步骤1:首先,我们需要在我们的项目中安装mongodb第三方包。在终端中,切换到你的项目路径,然后执行以下命令来安装:

npm install mongodb

步骤2:在你的Node.js代码里,你需要引入mongodb项:

const MongoClient = require('mongodb').MongoClient;

步骤3:然后,你需要创建一个MongoDB客户端,连接数据库。下面是一个例子:

const uri = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/test?retryWrites=true&w=majority";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

这里的URI是你的mongodb数据库的URI,格式是mongodb://username:password@server:port/database。如果你是在本地使用mongodbURI可能会是"mongodb://localhost:27017/mydb"。

步骤4:接下来,你需要连接到MongoDB服务器。你可以使用以下的代码来实现:

client.connect(err => {
  if (err) throw err;
  console.log("Connected to MongoDB server");
  client.close();
});

如果你成功地连接到了MongoDB服务器,将会在控制台打印出"Connected to MongoDB server"。如果遇到任何问题,程序会抛出异常。

步骤5:你也可以在连接后对数据库进行增删改查的操作。例如:

client.connect(err => {
  if (err) throw err;
  const collection = client.db("test").collection("devices");
  // perform actions on the collection object
  client.close();
});

步骤6:记得在完成所有操作后关闭连接

完整代码如下:

//通过mongodb连接mongodb
const { MongoClient } = require('mongodb') //引入mongodb
const url = 'mongodb://localhost:27017'
const dbName = 'test'
const clinet = new MongoClient(url, { useUnifiedTopology: true }) //创建客户端
const main = async () => {
    await clinet.connect() //连接数据库
    console.log('连接成功')
    const db = clinet.db(dbName) //选择数据库
    const collection = db.collection('users') //选择集合
    //插入数据
    const result = await collection.insertOne({ name: 'jack', age: 20 })
    console.log(result)
    //查询数据
    const resultFind = await collection.find({ name: 'jack' }).toArray()
    console.log(resultFind)
    //更新数据
    // const result = await collection.updateOne({ name: 'jack' }, { $set: { age: 21 } })
    // console.log(result)
    //删除数据
    // const result = await collection.deleteOne({ name: 'jack' })
    // console.log(result)
}
main().catch(console.dir).finally(() => {
    clinet.close() //关闭连接
})

在这里插入图片描述

以上就是在Node.js中通过mongodb包连接MongoDB数据库的全部步骤。

2. 使用mongoose连接

Node.js连接MongoDB数据,我们还可以使用一个名为Mongoose的包。Mongoose是一个MongoDB对象建模工具,设计用于在异步环境中工作。

以下是一些步骤来连接你的数据库:

安装 Mongoose
我们需要确保已经安装了node.js 和 npm(包管理工具)。然后,在你的node.js应用的根目录中运行以下命令来安装Mongoose:

npm install mongoose

初始化mongoose 连接
使用下列JavaScript代码段来初始化mongoose连接。这段代码应该被放置在你的主应用文件(通常是app.js或者server.js)的开头:

const mongoose = require('mongoose');
mongoose.connect('mongodb://<username>:<password>@<hostname>:<port>/<database>');

在这段代码中,<username>和<password>需要被你的MongoDB用户名和密码替换.<hostname>和<port>如果你使用的是本地数据库这两个参数通常是localhost和27017.<database>则是你希望连接的数据库名。

监听Connection events
你需要监听两个事件:

  1. error:在连接过程中出错时将被触发。

  2. open:当连接成功建立时将被触发。

下面的代码给了添加和监听这些事件的例子:

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
  // yay!
});

你的Mongoose连接现在应该可以被Node.JS应用使用了。

始终记住,连接操作在应用启动时只被调用一次。你可以用mongoose.connection对象在你的应用代码中的任何位置获取当前的数据库连接。不要多次调用mongoose.connect,因为可能会导致意外的结果。

完整代码如下:

// 引入数据库处理模块
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useCreateIndex: true })
    .then(() => console.log('数据库连接成功'))
    .catch(() => console.log('数据库连接失败'))

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
    // 查询user集合中的所有文档
    db.collection('users').find().toArray(function (err, docs) {
        // 打印
        console.log(docs);
    });
});

在这里插入图片描述
以上就是在Node.js中通过mongoose包连接MongoDB数据库的全部步骤

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

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

相关文章

mysql多表查询练习题

创建表及插入数据 create table if not exists dept3( deptno varchar(20) primary key , -- 部门号 name varchar(20) -- 部门名字 ); -- 创建员工表 create table if not exists emp3( eid varchar(20) primary key , -- 员工编号 ename varchar(20), -- 员工名字 age int, -…

换零钱——最小钱币张数(贪心算法)

贪心算法&#xff1a;根据给定钱币面值列表&#xff0c;输出给定钱币金额的最小张数。 (本笔记适合学完python基本数据结构&#xff0c;初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣…

CS EXE上线主机+文件下载上传键盘记录

前言 书接上文&#xff0c;CobaltStrike_1_部署教程及CS制作office宏文档钓鱼教程&#xff0c;该篇介绍【使用CS生成对应exe木马&#xff0c;上线主机&#xff1b;对上线主机进行&#xff0c;文件下载&#xff0c;文件上传&#xff0c;键盘记录】。 PS&#xff1a;文章仅供学习…

unseping

代码审计 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($this->method, array("ping"))) {call…

关于 colab Tutorial的介绍

&#xff08;一&#xff09;常用的快捷键 (二) 网上环境的配置 按照官网上所给的提示一步一步操作即可 注意&#xff1a;此平台需要科学的上网

word因导入mathtype不能使用复制粘贴快捷键的解决方法

1. 我们安装完mathtype后&#xff0c;有时会有两个mathtype显示&#xff0c;其中一个是属于office文件夹下的&#xff0c;另一个是win文件夹下的。如图&#xff1a; 2. 如果word中的复制粘贴快捷键&#xff08;CTRLC和CTRLV&#xff09;不能用&#xff0c;通常是因为office路径…

Arduino STM32F103C8+ST7735 1.8‘‘3D矢量图形demo

Arduino STM32F103C8ST7735 1.8’3D矢量图形demo &#x1f4cc;开源项目地址&#xff1a;https://github.com/cbm80amiga/ST7735_3d_filled_vector&#x1f527;所需库&#xff1a;https://github.com/cbm80amiga/Arduino_ST7735_STM&#x1f516;本开源工程基于Arduino开发平台…

JavaWeb JSP基础语法和指令

1. JSP语法 JSP是Java技术的一种应用&#xff0c;对Java所有的语法都支持&#xff0c;除此之外&#xff0c;还有一些扩充的语法。 1&#xff09;输出变量 <% new java.util.Date()%> <% name %> 2) 执行java代码 <% int a 0, b 1, t; for(int i0;i<10;i)…

day61_SSM+自定义注解实现日志记录

SSM自定义注解AOP实现日志记录 1 需求 工作中,经常会遇到记录日志的动作,以前是使用日志框架来实现,现在可以使用注解来实现,使用起来更方便,随用随加~ 今天我们演示在SSM的基础上,对普通的方法加上自定义注解,注解中写上该方法的日志信息,然后将日志信息记录到数据库中. 编…

时间序列预测 | Matlab移动平均模型MA时间序列预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab移动平均模型MA时间序列预测 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环境变量 warning off % 关闭报警信息…

Go 并发模型—Goroutines

前言 Goroutines 是 Go 语言主要的并发原语。它看起来非常像线程&#xff0c;但是相比于线程它的创建和管理成本很低。Go 在运行时将 goroutine 有效地调度到真实的线程上&#xff0c;以避免浪费资源&#xff0c;因此您可以轻松地创建大量的 goroutine&#xff08;例如每个请求…

win11病毒和防护功能显示‘页面不可用’的解决方法

问题如上图所示&#xff0c;试了很多种方法&#xff0c;有一种是可以用的&#xff0c;记录一下。 步骤&#xff1a; 1、搜索框输入cmd&#xff0c;以管理员身份运行命令提示符 2、输入 第一条代码 reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows D…

吉他谱如何自动播放?个人乐谱播放网站YUERGS搭建

吉他谱如何自动播放&#xff1f;个人乐谱播放网站YUERGS搭建 背景介绍网站布局技术栈代码结构吉他谱文件结构滚动播放 背景 我是一个吉他弹唱爱好者&#xff0c;我的吉他谱都是自己在网络上收集到的图片&#xff0c;一般一首曲子都是好几张图片组成的。当我在弹吉他时&#xf…

#systemverilog# 进程控制问题#(五)关于 disable fork的陷阱

一 概念回顾 SV中的进程包括:静态进程、动态进程。 静态进程:initial、always、fork...join 发起; 动态进程:fork...join_any 、fork...join_none 发起; 注意,以下情形,进程(process)会产生相应的线程(thread)。 (1)initial 、always 执行,会产生相应的线程 (…

[VUE学习]权限管理系统前端vue实现8-右上角用户头像显示实现

1.登录成功之后存储 用户信息 在store里面添加代码 SET_USERINFO: (state, userInfo) > {sessionStorage.setItem("userInfo", JSON.stringify(userInfo))},GET_USERINFO: state > {return JSON.parse(sessionStorage.getItem("userInfo"))} 2.Logi…

顺利通过高项

这里有我自己手敲的2022年12月改版后&#xff08;最新&#xff09;的十个项目管理的过程&#xff0c;包括他们的输入、输出、工具与技术&#xff0c;还有各个过程的作用&#xff1a; 然后还有十篇自己写的论文&#xff1a; 更有第四版的教程&#xff08;PDF版&#xff09;&a…

❤️创意网页:动态彩色泡泡页面(HTML+CSS+JS)简单好用

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

二叉搜索树的第K大节点

还是做简单题有成就感&#xff0c;看到题就有了想法&#xff0c;先来一个中序遍历放到一个容器里面&#xff0c;然后按下标找到第k大的数就行&#xff0c;这是我的代码。 class Solution {Deque<Integer> deque new LinkedList<Integer>();public int kthLargest…

Android NTP时间同步源码分析

Android NTP时间同步源码分析 Android系统设置自动时间后&#xff0c;如果连接了可用的网络。会同步网络时间。这个处理是 NetworkTimeUpdateService完成的。某些定制化的系统&#xff0c;需要禁止网络时间同步。比如仅仅使用GPS时间。基于Android9&#xff0c;分析一下 Andro…

高效协作助力企业发展:企业网盘在提升工作效率方面的重要作用!

企业网盘是一种专门为了企业协作工作而设计的在线文档管理平台&#xff0c;受到了众多企业用户的青睐与喜爱。企业网盘如何大幅提高企业协作工作效率&#xff1f; 1、提高文件访问效率 传统的文件共享方式往往使用邮件附件或U盘进行传递&#xff0c;可能会遇到文档版本不一致、…