mongoDB的安装及使用

server/2024/11/19 12:03:31/

文章目录

  • 1、mongoDB的简介
  • 2、mongoDB的安装及配置
  • 3、node.js项目中mongoDB使用
    • 3.1.引入库
    • 3.2.数据操作增删改
  • 4、mongoDB的查询
    • 4.1.查询
    • 4.2.高级查询


1、mongoDB的简介

  • MongoDB是一个流行的开源文档型数据库,它使用类似 JSON 的文档模型存储数据,这使得数据存储变得非常灵活。

  • MongoDB 是一个基于文档的 NoSQL 数据库,由 MongoDB Inc. 开发。

  • MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

  • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

  • MongoDB的设计理念是为了应对大数据量、高性能和灵活性需求。

  • MongoDB使用集合(Collections)来组织文档(Documents),每个文档都是由键值对组成的。

    数据库(Database):存储数据的容器,类似于关系型数据库中的数据库
    集合(Collection):数据库中的一个集合,类似于关系型数据库中的表。
    文档(Document):集合中的一个数据记录,类似于关系型数据库中的行(row),以 BSON 格式存储

    特点

    1. 文档导向的存储:MongoDB 是一个面向文档的数据库,它以 JSON-like 的格式存储数据,使得数据结构更加灵活和丰富。
    2. 索引优化查询:MongoDB 允许用户为文档中的任意属性创建索引,例如 FirstName 和 Address,从而提高查询效率和排序性能。
    3. 数据镜像与扩展性:通过本地或网络创建数据的副本,MongoDB 实现了强大的数据冗余和扩展能力。
    4. 水平扩展与分片:面对增加的负载,MongoDB 可以通过分片技术将数据分布到计算机网络中的其他节点上,实现水平扩展
    5. 强大的查询语言:MongoDB 使用 JSON 格式的查询语法,支持复杂的查询表达式,包括对内嵌对象和数组的查询。
    6. 数据更新:利用 update() 命令,MongoDB 能够替换整个文档或更新指定的数据字段,提供了灵活的数据更新方式。
    7. MapReduce 批量处理:MongoDB 的 MapReduce 功能专为大规模数据处理和聚合操作设计,通过 Map 函数的 emit(key, value) 调用和 Reduce 函数的逻辑处理,实现高效的数据汇总。
    8. MapReduce 脚本编写:Map 和 Reduce 函数使用 JavaScript 编写,可以通过 db.runCommand 或 mapreduce 命令在 MongoDB 中执行。
    9. GridFS 大文件存储:GridFS 是 MongoDB 内置的功能,用于存储和检索大于 BSON 文档大小限制的文件,如图片和视频。
    10. 服务端脚本执行:MongoDB 允许在服务端执行 JavaScript 脚本,提供了直接在服务端执行或存储函数定义以供后续调用的能力。
    11. 多语言支持:MongoDB 提供了对多种编程语言的支持,包括但不限于 RUBY、PYTHON、JAVA、C++、PHP 和 C#。
    12. 安装简单:MongoDB 的安装过程简单直观,便于用户快速部署和使用。

2、mongoDB的安装及配置

mongoDB官网地址
进入官网—>点击社区版进入下载页面
在这里插入图片描述
选择版本,支持的计算机系统,进行下载,下载的是.msi文件
在这里插入图片描述
可以通过点击 “Custom(自定义)” 按钮来设置你的安装目录。
在这里插入图片描述
在这里插入图片描述
下一步安装 “install mongoDB compass” 不勾选(当然你也可以选择安装它,可能需要更久的安装时间),MongoDB Compass 是一个图形界面管理工具,我们可以在后面自己到官网下载安装下载地址也可以勾选安装的比较慢,可以耐心等待。
在这里插入图片描述
可以通过mongoDBCompass应用打开控制面板,进行数据库设置,也可以通过指令操作,可以建项目用到的表
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8e0bcca30da546a5aba8642bb0b00039.png
在这里插入图片描述
可以添加数据或者导入json数据
在这里插入图片描述
导入数据成功
在这里插入图片描述

nodejsmongoDB_48">3、node.js项目中mongoDB使用

3.1.引入库

新建文件夹,初始化package.json文件

npm init -y

在这里插入图片描述
npm插件地址
项目中执行指令运用MongoDB,会安装依赖包

npm install mongodb
# or ...
yarn add mongodb

在这里插入图片描述
项目中应用,运行程序指令,code.js为文件名

node ./code.js

code.js文件

const { MongoClient } = require('mongodb');
// or as an es module:
// import { MongoClient } from 'mongodb'// Connection URL
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);// Database Name
const dbName = 'test';async function main() {// Use connect method to connect to the serverawait client.connect();// 取出数据库const db = client.db(dbName);// 从数据库中取出集合对象const collection = db.collection('person');// 添加返回所有文档的查询。let pers = await collection.find({}).toArray();console.log(pers);return 'done.';
}main().then(console.log).catch(console.error).finally(() => client.close());

3.2.数据操作增删改

  • 新增数据
    1. insertOne() 方法用于在集合中插入单个文档。
      db.collection.insertOne(document, options)
      document:要插入的单个文档。
      options(可选):一个可选参数对象,可以包含 writeConcern 和 bypassDocumentValidation 等。
    2. insertMany() 方法用于在集合中插入多个文档。
      db.collection.insertMany(documents, options)
      documents:要插入的文档数组。
      options(可选):一个可选参数对象,可以包含 ordered、writeConcern 和 bypassDocumentValidation 等。
    3. db.collection.save()方法在插入文档时表现得类似于 insertOne()。
      db.collection.save(document, options)
      document:要保存的文档。
      options(可选):一个可选参数对象,可以包含 writeConcern 等。
    4. options 参数
      - ordered(仅适用于 insertMany):布尔值。如果为 true,则按顺序插入文档,在遇到错误时停止;如果为 false,则尝试插入所有文档,即使遇到错误也继续。默认值为 true。
      - writeConcern:指定写操作的确认级别。
      - bypassDocumentValidation:布尔值。如果为 true,则忽略集合的文档验证规则。
      // 新增数据let insertResult  =  await collection.insertMany([{ name:'西西(女)' , age:12 }]);console.log(insertResult);
    
    insertMany 命令返回一个对象,其中包含有关 insert 操作的信息。
    在这里插入图片描述
    上图信息:修改成功,修改一条,修改的id
  • 修改数据
    1. updateOne() 方法用于更新匹配过滤器的单个文档。
      db.collection.updateOne(filter, update, options)
      filter:用于查找文档的查询条件。
      update:指定更新操作的文档或更新操作符。
      options:可选参数对象,如 upsert、arrayFilters 等。
    2. updateMany() 方法用于更新所有匹配过滤器的文档。
      db.collection.updateMany(filter, update, options)
      filter:用于查找文档的查询条件。
      update:指定更新操作的文档或更新操作符。
      options:可选参数对象,如 upsert、arrayFilters 等。
    3. replaceOne() 方法用于替换匹配过滤器的单个文档,新的文档将完全替换旧的文档。
      db.collection.replaceOne(filter, replacement, options)
      filter:用于查找文档的查询条件。
      replacement:新的文档,将替换旧的文档。
      options:可选参数对象,如 upsert 等。
    4. findOneAndUpdate() 方法用于查找并更新单个文档,可以选择返回更新前或更新后的文档。
      db.collection.findOneAndUpdate(filter, update, options)
      filter:用于查找文档的查询条件。
      update:指定更新操作的文档或更新操作符。
      options:可选参数对象,如 projection、sort、upsert、returnDocument 等。
    5. options 参数
      upsert:如果没有匹配的文档,是否插入一个新文档。
      arrayFilters:当更新嵌套数组时,指定应更新的数组元素的条件。
      collation:指定比较字符串时使用的排序规则。
      returnDocument:在 findOneAndUpdate 中使用,指定返回更新前 (“before”) 或更新后 (“after”) 的文档。
     const updateResult = await collection.updateMany({name:'西西'},{$set:{age:18}});console.log(updateResult);
    
    在这里插入图片描述 在这里插入图片描述
  • 删除数据
    1. deleteOne() 方法用于删除匹配过滤器的单个文档。
      db.collection.deleteOne(filter, options)
      // filter 用于查找要删除的文档的查询条件。 options(可选):一个可选参数对象。
    2. deleteMany() 方法用于删除所有匹配过滤器的文档。
      db.collection.deleteMany(filter, options)
      filter:用于查找要删除的文档的查询条件。options(可选):一个可选参数对象。
    3. findOneAndDelete() 方法用于查找并删除单个文档,并可以选择返回删除的文档。
      db.collection.findOneAndDelete(filter, options)
      filter:用于查找要删除的文档的查询条件。options:可选参数对象,如 projection、sort 等。
      // 删除数据 西西const deleteResult  = await collection.deleteMany({_id: new ObjectId("6736b73c48a9f999c6acfe2d")})console.log(deleteResult)
    
    <a class=数据库信息已删除" /> 返回信息
    返回信息解析:执行成功,删除一条数据

4、mongoDB的查询

4.1.查询

使用 find()、findOne() 方法。

  1. find()
    方法以非结构化的方式来显示所有文档。
    db.collection.find(query, projection)
    

    query:用于查找文档的查询条件。默认为 {},即匹配所有文档。
    projection(可选):指定返回结果中包含或排除的字段。
    返回数据格式
    返回数组,可以使用 toArray() 方法

    let pers = await collection.find({}).toArray();console.log(pers);
    
  2. findOne()
    用于查找集合中的单个文档。如果找到多个匹配的文档,它只返回第一个。
    db.collection.findOne(query, projection)
    

    query:用于查找文档的查询条件。默认为 {},即匹配所有文档。
    projection(可选):指定返回结果中包含或排除的字段。

      let pers = await collection.findOne({name: '西西(女)'})console.log(pers);
    
    在这里插入图片描述

4.2.高级查询

  1. 比较操作符
    比较操作符:$gt、$lt、$gte、$lte、$eq、$ne 、$in、 $nin

    小于 $lt
    小于等于 $lte
    大于 $gt
    大于等于 $gte
    不等于 $ne
    等于 $eq
    在指定的数组中 $in
    不在指定的数组中 $nin

      let pers = await collection.find({age:  { $lt: 25 }}).toArray();
    console.log(pers);
    

    在这里插入图片描述

  2. 逻辑操作符
    $and、$or、$not、$nor

    $and 逻辑与,符合所有条件
    $or 逻辑或,符合任意条件
    $not 取反,不符合条件
    $nor 逻辑与非,均不符合条件

     let pers = await collection.find({$and:  [{name: '小黑'}, {age: 67}]}).toArray();console.log(pers);
    

    在这里插入图片描述

  3. 使用正则表达式
    使用正则表达式进行模式匹配查询。

     let pers = await collection.find({name: //}).toArray();console.log(pers);
    

    在这里插入图片描述

  4. 排序
    对查询结果进行排序。

      let pers = await collection.find({name: //}).sort({ age: -1 }).toArray();console.log(pers);
    

    在这里插入图片描述

  5. 限制与跳过
    可以对查询结果进行限制和跳过指定数量的文档。

    let pers = await collection.find({}).sort({age: -1}).skip(5).limit(5).toArray();
    console.log(pers);
    

    在这里插入图片描述


http://www.ppmy.cn/server/143178.html

相关文章

论文笔记(五十六)VIPose: Real-time Visual-Inertial 6D Object Pose Tracking

VIPose: Real-time Visual-Inertial 6D Object Pose Tracking 文章概括摘要I. INTRODACTIONII. 相关工作III. APPROACHA. 姿态跟踪工作流程B. VIPose网络 文章概括 引用&#xff1a; inproceedings{ge2021vipose,title{Vipose: Real-time visual-inertial 6d object pose tra…

知识图谱,语义分析,全文检索,neo4j,elaticsearch,知识库平台(java,vue)

一、项目介绍 一款全源码&#xff0c;可二开&#xff0c;可基于云部署、私有部署的企业级知识库云平台&#xff0c;一款让企业知识变为实打实的数字财富的系统&#xff0c;应用在需要进行文档整理、分类、归集、检索、分析的场景。 为什么建立知识库平台&#xff1f; 助力企业…

kafka:使用flume自定义拦截器,将json文件抽取到kafka的消息队列(topic)中,再从topic中将数据抽取到hdfs上

抽取trans_info.json的数据到kafka上&#xff0c;对其中的tr_flag0的数据进行过滤抛弃&#xff0c;只保留正常的状态数据&#xff1a; 将此json文件放在集群中的 /home/zidingyi/trans_info.json 目录下 首先先在java代码中自定义拦截器&#xff1a; 1&#xff09;&#xff1…

django从入门到实战(三)——CBV视图介绍

在 Django 中&#xff0c;不同类型的视图&#xff08;如数据显示视图、数据操作视图和日期筛选视图&#xff09;都有各自的方法和参数。以下是对这些视图及其方法的详细介绍。 1. 数据显示视图 1.1 重定向视图 方法&#xff1a; redirect(): 用于重定向到另一个 URL。 使用…

无人机+无人车+机器狗:城市巷战突破技术详解

在城市巷战中&#xff0c;无人机、无人车和机器狗的组合可以形成一种全新的战场突破技术&#xff0c;这种组合能够大幅提升作战效率&#xff0c;减少人员伤亡。以下是对这一技术的详细解析&#xff1a; 一、无人机的作用 1.空中侦察&#xff1a;无人机能够提供高空视角&#x…

Acwing342

这个代码实现了一种结合 连通块分解、拓扑排序 和 Dijkstra 算法 的复杂图的最短路径计算方法&#xff0c;适用于含有两类边的图结构&#xff1a;普通边&#xff08;在连通块内&#xff09;和特殊边&#xff08;跨连通块&#xff09;。 以下是详细的代码讲解&#xff0c;逐步解…

IDEA旗舰版编辑器器快速⼊门(笔记)

简介&#xff1a;javaweb开发必备软件之IDEA期间版介绍 DEA编辑器器版本介绍 官⽹网&#xff1a;https://www.jetbrains.com/地址&#xff1a;https://www.jetbrains.com/idea/download/#sectionmac DEA 分社区版(Community) 和 旗舰版(Ultimate)&#xff0c;我们做JavaWeb开…

C++中的观察者模式:通俗易懂的讲解与实现

什么是观察者模式&#xff1f; 观察者模式是一种常见的设计模式&#xff0c;它解决了这样一个问题&#xff1a;当某个对象的状态发生变化时&#xff0c;如何通知依赖它的其他对象&#xff1f; 用通俗的话说&#xff0c;观察者模式就像我们日常的“订阅-通知”机制&#xff1a…