node中的数据持久化之mongoDB

news/2024/7/3 6:18:18

一、什么是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.niftyadmin.cn/n/3649302.html

相关文章

在JavaScript中将toLocaleString与数字,数组或日期一起使用

toLocaleString is a built-in JavaScript method used to convert the date and time to a string using the system locales. &#x1f913;&#x1f680; toLocaleString是内置JavaScript方法&#xff0c;用于使用系统区域设置将日期和时间转换为字符串。 &#x1f913;&…

Android开发过程中的几个小知识点

1. 在程序的Manifest里面对应的Activity里面添加android:windowSoftInputMode"adjustResize"属性&#xff0c;可以实现打开输入法时&#xff0c;界面自动上移&#xff0c;不被输入法遮盖。 2. 添加按钮的按下效果时&#xff0c;可以在drawable文件夹下新建一个xml文件…

[dotNET]如何利用ConfigurationSettings.AppSettings.GetValues读取配置文件中多个同Key的value

编写者&#xff1a;郑昀Ultrapower默认情况下&#xff0c;string[] strArray System.Configuration.ConfigurationSettings.AppSettings.GetValues("Uri");是无法读取配置文件中多个同Key的value的。如下所示的配置&#xff1a;用MSDN告诉我们的GetValues是读不到的…

node.js 模块_如何创建Node.js模块

node.js 模块The author selected the Open Internet/Free Speech Fund to receive a donation as part of the Write for DOnations program. 作者选择了“ 开放互联网/言论自由基金会”作为“ Write for DOnations”计划的一部分来接受捐赠。 介绍 (Introduction) In Node.j…

[收藏]Matt Powell的《Server-Side 异步Web Methhods》

Server-Side 异步Web Methhods http://msdn.microsoft.com/library/en-us/dnservice/html/service10012002.asp?frametrueMatt PowellMicrosoft CorporationOctober 2, 2002摘要&#xff1a;Matt Powell 介绍了如何在服务器端使用异步 Web 方法&#xff0c;来创建高性能的 Mic…

yarn命令和npm命令_npm vs纱线命令备忘单

yarn命令和npm命令Here’s a cheat sheet you can use as a handy reference for npm & Yarn. 这是一份备忘单&#xff0c;您可以将其用作npm&#xff06; Yarn的方便参考。 There’s a lot of similarities between npm and Yarn. As the newer technology Yarn (release…

新建项目与数据库搭建

#新建项目与数据库配置 ### 一、新建项目 ### File——Gradle——JAVAWEB——勾选1和2&#xff0c;选择use local gradle distribution ### 二。添加依赖&#xff0c;build.gradle ### dependencies { // Gson json compile com.google.code.gson:gson:2.8.0 …

[EntLib]在SR.Strings中使用中文字符串资源

编写者&#xff1a;郑昀UltraPower要想在SR.Strings中使用中文字符串资源&#xff0c;必须这样&#xff1a;把你的SR.Strings文件保存为UTF-8编码的(具体操作是&#xff1a;VS.Net2003->文件菜单-高级保存选项&#xff0c;选择“Unicode(UTF-8 带签名) - 代码页 65001”)&am…