MongoDB 4系列(1)概述与安装和资源介绍

2023-11-18

MongoDB 4 系列(1)概述与安装

前言

  之前很早时候,因为参加牛客的读书笔记活动,曾做过一定笔记和小实验,当时没得很深入的研究。现在打算腾出手来,好好的学习一番。

  之前的笔记都是基于MongoDb的3.0x版本,比较老旧。目前来说,我打算用最近最新的MongoDB,版本是4.2.3。进行学习,目前工作中需要要用。

概述

  MongoDB 是一个基于分布式文件存储的文档数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

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

  MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

·

主要特点

  • MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
  • 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName=“Sameer”,Address=“8 Gandhi Road”)来实现更快的排序。
  • 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
  • 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
  • Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
  • Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
  • Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
  • GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  • MongoDB安装简单。

mongoDB的云库

  MongoDB现在挺友好,有永久免费的沙箱MongoDB云使用,提供学习,有8G很不错了。

  现在博文并不打算用该处教怎么创建clusters,因为很简单。

  进行简单的登录和注册后,就能看见自己的MongoDB云上数据库了。

在这里插入图片描述

MongoDB资源

  以下两款GUI的MongoDB工具还不错,当然也可以选其他的。本次博文将以Studio 3T为主(因为它还在免费试用期,而且的确好用)。

下载页面

Studio 3T

  Studio 3T是适用于Windows,Mac和Linux的用于MongoDB的专业GUI和IDE。 无论使用者是否具有MongoDB查询语言知识均可更快地浏览和管理数据,该工具可以用于构建查询,数据浏览,聚合和数据比较,导入/导出,代码生成等功能。

  安装时,会让你选择哪一种你喜欢的界面,如下所示,我个人感觉哪一种都行,选择第二种更适合拥有高级mongoDB查询基础的人员,目前学习来说,先以第一种为主。

在这里插入图片描述

  最后的界面如下所示。

在这里插入图片描述

Robo 3T

  是Studio3T的免费版本,说强大也算强大,说不强大也不强大。

  相关学习使用地址,可以参考此处,以及此处


morphia

  morphia是现在大部分公司所用的进行mongoDB数据保存、查询的工具,,现在MongoDB已经将其挪到社区进行维护,github的地址请点击这里。它能让Java实体类到MongoDB文档的映射,透明地将Java实体映射到MongoDB文档并返回。

  mongoDB在maven官方仓库,老式的在2017年1月最后更新到1.3.2。

<dependency>
    <groupId>org.mongodb.morphia</groupId>
    <artifactId>morphia</artifactId>
    <version>1.3.2</version>
</dependency>

  2018年底,MongoDB向社区贡献了Morphia,以维护和发展该项目。以下是更新后的maven引入:

<dependency>
   <groupId>dev.morphia.morphia</groupId>
   <artifactId>core</artifactId>
   <version>1.4.1</version>
</dependency>

  移交到社区后,发展到博文现在,当前的版本已经到了2.0.0版本。

  1.4.0 的版本主要是包名和Maven坐标名的改变,大致实现功能和1.3.2相同。到了1.5.x已经更改了许多,把Option类相关的引入的内容都标记为弃用,以此简化,还做了很多更改,是为了2.0的过渡和未来的更新。

  2.0的目标是为了精简和简单化,已经拥抱java 11及以上的版本,而且引入更流畅的API,更新了映射器等等。

  为了学习所用,目前打算采用的坐标名为org.mongodb.morphia的项目,即1.3.2。

MongoDB Java Drivers

  与morphia一起使用的是mondoDB的java 驱动器,用以和MongoDB进行同步。github地址请点击这里

  本次学习,打算先试水3.12.1

  maven引用很简单了,就如下所示,打算先用3.12.1:

<dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.12.1</version>
</dependency>

Windows安装mongoDB

  本次安装的版本是MongoDB 4.2.3 社区版,下载地址

  然后双击运行即可,建议用自定义。

在这里插入图片描述

在这里插入图片描述

  接下来都用默认值即可。

  然后去到安装目录下的bin目录,双击mongo.exe。

在这里插入图片描述

  可以试着输入下面的命令测试:

use tutorial

  可以看见输出如下所示:

在这里插入图片描述

  接下来插入一条数据试试。

db.users.insert({username:"yuyuntan"})

在这里插入图片描述

Studio3T连接mongoDB

  使用Studio3T进行连接,点击测试连接即可,因为是默认的,我这个测试连接是通过的。

在这里插入图片描述

在这里插入图片描述

  然后就可以看见如下所示:
在这里插入图片描述

  刚刚创建的数据都存在了。

连接altas云库

  好了,再来回顾一下,altas。

  当你创建你的altas集群后,我们要怎么连接,下面教了。

  先点击CONNECT按钮。

在这里插入图片描述

  这里点击后会弹出页面框。

  这个地方是加入你当前IP地址入白名单,个人认为为了简单化,就加0.0.0.0。

在这里插入图片描述

在这里插入图片描述

  接着创建用户名和密码。
在这里插入图片描述

  接下来就通知你创建成功了用户,接下来选择连接的方式。

在这里插入图片描述

  接下来先选第一个

在这里插入图片描述
在这里插入图片描述

  看见中间让你复制的了么,先把你现在打开的mongoDB的exe先关闭。

  然后还在bin目录下,输入那个可复制的命令。

mongo "mongodb+srv://cluster0-cgkii.mongodb.net/test"  --username yuyuntan

在这里插入图片描述

在这里插入图片描述

  然后输入密码就可以了,如果密码不正确是打不开的。

在这里插入图片描述

  接着回到页面,就可以看见连接数。

在这里插入图片描述

  接着,如果我要Studio3T也连接上去,再继续点击CONNECT按钮。

  选择中间的这个。
在这里插入图片描述

  接着选择语言,我选java,3.6及以上。

在这里插入图片描述

  复制后得到:

mongodb+srv://yuyuntan:<password>@cluster0-cgkii.mongodb.net/test?retryWrites=true&w=majority

  用自己的密码替换中间 <password>

  隐私问题,打码了密码。

在这里插入图片描述

在这里插入图片描述

  然后对下面红线的进行鼠标双击。

在这里插入图片描述

在这里插入图片描述

  就看见了。

java 代码连接altas云库

  首先要引入两个pom文件。

  这里引入的分别是这两个:

       <dependency>
            <groupId>org.mongodb.morphia</groupId>
            <artifactId>morphia</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.12.1</version>
        </dependency>

  连接的代码如下所示:

 MongoClientOptions.Builder builder = MongoClientOptions.builder()
                // 设置最大连接数
                .connectionsPerHost(10)
                // 连接超时时间
                .connectTimeout(10_000)
                // 设置socket连接超时时间
                .socketTimeout(20_000)
                // 设置是否启用游标
                .cursorFinalizerEnabled(true)
                // 描述副本集的读取行为
                .readPreference(ReadPreference.primary());
        // 创建mongo client 连接的uri资源
        MongoClientURI uri = new MongoClientURI(connectUrl,builder);
        MongoClient mongoClient = new MongoClient(uri);
        // 读取的数据库名
        String databaseName = "tutorial";
        // use tutorial
        MongoDatabase db = mongoClient.getDatabase(databaseName);
        // db.getCollection("users")
        MongoCollection<Document> users = db.getCollection("users");
        // db.getCollection("users").find()
        MongoCursor cursor =  users.find().cursor();
        while (cursor.hasNext()){
            System.out.println(cursor.next());
        }

  其中connectUrl就是

mongodb+srv://yuyuntan:<password>@cluster0-cgkii.mongodb.net/test?retryWrites=true&w=majority

  用自己的密码替换中间 <password>

  最后输出结果如下所示:
在这里插入图片描述

总结

  mongoDB本篇主要是列举一些使用工具和如何使用这些资源,并且会进行代码的示例描述。不一定尽善尽美,希望能对看者也帮助。

参考文献

[1] MongoDB window安装官方文档

[2] MongoDB菜鸟教程

[3] atlas官方文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 4系列(1)概述与安装和资源介绍 的相关文章

  • $lookup结果中的$match

    我有下一个蒙戈代码 db users aggregate match and UserName eq administrator Company CompanyName eq test lookup from companies local
  • 如何使用 Sails.js 和 Waterline 更新 MongoDB 子文档中的特定键?

    当尝试使用 Sails js 和 Waterline ORM 更新 MongoDB 子文档中的单个键时 我遇到了问题 这就是我的person js模型看起来像 module exports attributes name type stri
  • CoreMongooseArray 到普通数组

    我正在从一个架构中选出 2 个元素 并希望在另一个架构中进行更新 为此 我使用切片方法将数组中的前 2 个元素列入候选名单 但我越来越 CoreMongooseArray 元素1 元素2 而不是 元素1 元素2 如何删除 CoreMongo
  • 加密 mongodb 中的密码字段

    我有以下代码 它插入userName and password进入数据库 但密码以纯文本格式存储 我的意思是 当我查看数据库时 我可以看到插入的密码 我想存储password in encrypted format MongoClient
  • mongo objectid“包含”查询

    我想查询 MongoDB 数据库中的集合以查找包含部分 ObjectID 的所有记录 对于普通字符串 我可以使用如下正则表达式 db teams find some string 51eed 但是我该如何对 ObjectID 执行类似的操作
  • 嵌入文档中的mongodb限制

    我需要创建一个消息系统 一个人可以在其中与许多用户进行对话 例如 我开始与 user2 user3 和 user4 交谈 因此他们中的任何人都可以看到整个对话 并且如果对话在任何时候都不是私密的 则任何参与者都可以将任何其他人添加到对话中
  • MongoDB:连接到 MongoDB 的 resolv.conf 的 DNS 问题

    我想从 MongoDB Atlas 导出一些数据 如果我执行下面的命令 它会尝试连接localhost并导出数据 mongoexport uri mongodb srv
  • NodeJS:将 JSON 保存到 MongoDB

    我正在尝试从 API 获取 JSON 并将其存储到 MongoDB 数据库中 显然 这是行不通的 我的应用程序似乎停留在我尝试将数据保存到数据库的位置 请告知该怎么做 这是我的代码 var express require express v
  • 未找到“MongoId”类(带有 MongoDB Doctrine 的 Zend 框架)

    我目前正在尝试将 MongoDB 与 ZendFramework 中的 Doctrine 集成 我做了很多教程 在 StackOverflow 或其他地方 但没有任何效果 我一步步按照教程进行操作 http www bigwisu com
  • Angular js 服务器端过滤器和分页

    我有几个输入字段 我们可以使用带有搜索名称的输入字段作为示例 当有人在该字段中输入内容时 我希望能够过滤对象的结果 但我想做过滤器服务器端而不是客户端 我有一个包含大量记录的数据库 因此我不想返回所有记录并在客户端进行过滤 这确实会减慢速度
  • 使用 ObjectId 键和字符串数组定义映射作为 mongoose 模式中的值

    我在为数据库创建 Mongoose 架构时遇到问题 我想创建一个以 objectId 作为键 以字符串值数组作为值的映射 我能得到的最接近的是 var schema new Schema map myId type mongoose Sch
  • 按一个字段聚合,选择另一个字段最大值的文档作为集合

    使用聚合框架 获取每个分组的字段最大值的文档的最佳方法是什么 因此使用下面的集合 我希望具有为每个具有最新日期的 group id 返回一个文档的功能 第二个清单显示了所需的结果 group id date 1 11 1 12 1 11 2
  • 在 Nodejs 中,如何停止 FOR 循环直到 MongoDB 调用返回

    我正在研究下面的代码片段 我有一个名为 stuObjList 的 JSON 对象数组 我想循环遍历数组以查找具有特定标志集的特定 JSON 对象 然后进行数据库调用以检索更多数据 当然 FOR 循环不会等待数据库调用返回并到达 j leng
  • 减少从 MongoDB 加载大熊猫数据帧所使用的内存

    我有一个大型数据集 包含 4000 万条记录 总大小约为 21 0G 存储在 MongoDB 中 我花了几个小时将其加载到 pandas 数据框中 但总内存大小增加到约 28 7G 加载之前约为 600Mb cursor mongocoll
  • Node js mongodb 删除错误“key $lte 不得以 '$' 开头”

    db collection session remove timestamp lte a function err docs console log err console log docs Version mongodb is 2 6 5
  • Meteor.setTimeout 和 Meteor.methods 之间的并发

    在我的 Meteor 应用程序中实现回合制多人游戏服务器 客户端通过发布 订阅接收游戏状态 并且可以调用 Meteor 方法sendTurn将回合数据发送到服务器 他们无法直接更新游戏状态集合 var endRound function g
  • 在 Meteor 中运行示例的问题

    我正在测试 Meteor 示例 这是我运行时看到的meteor在待办事项示例中 Unexpected mongo exit code 100 Restarting Unexpected mongo exit code 100 Restart
  • MongoDB:在具有未知键的对象中查找给定字段值的文档

    我正在建立一个关于论文 论点的数据库 它们与其他参数相关 我将这些参数放置在带有动态键 https stackoverflow com questions 12393351 using a variable in mongodb updat
  • Node.js 和 Passport 对象没有 validPassword 方法

    我正在使用 Node js Express Passport 创建一个简单的身份验证 本地 到目前为止我所达到的效果是 当输入错误的用户名或密码时 用户将被重定向到错误页面 但是当用户输入正确的用户名和密码时 我收到此错误 node mod
  • 我可以将 MongoDB 与实体框架一起使用吗?

    实体框架有可能支持MongoDB数据库吗 有人写过实体框架MongoDB Provider吗 简短的回答 不 这肯定是可能的 但不合理 MongoDB 是文档数据库 不支持集合之间的任何物理关系 EF 非常适合 SQL MySQL 等关系数

随机推荐

  • linux程序前后台切换

    1 怎么样使程序在后台执行 方法有很多 这里主要列举两种 假如我们有程序pso cpp 通过编译后产生可执行文件pso 我们要使pso在linux服务器后台执行 当客户端关机后重新登入服务器后继续查看本来在终端输出的运行结果 假设操作都在当
  • Python selenium —— selenium与自动化测试成神之路

    Python selenium selenium与自动化测试成神之路 忽然想谈谈自动化的学习路径 因为发现很多人总是急于求成 不懂该如何学习 在群里总是会遇到很多人问低级问题 写了一个selenium脚本 却执行失败 跑到群里来问 大神 这
  • 双指针模板

    核心思路 首先打一个 O n 2 O n 2 O n2 的暴力 然后考虑性质 当i j具有单调性的时候 那么我们才可以用双指针来优化 基础例题 最长连续不重复子
  • HTTPS加密流程

    HTTPS HTTPS 一 什么是HTTPS 二 什么是 加密 三 加密的方式有哪些 1 对称加密 2 非对称加密 3 中间人攻击 4 引入证书 HTTPS 一 什么是HTTPS HTTPS与HTTP一样都是应用层协议 与HTTPS不同的是
  • Javassist

    1 简介 Javassist JAVA programming ASSISTant 是在Java中编辑字节码的类库 它使Java程序能够在运行时定义一个新类 并在JVM加载是修改类文件 我们常用到的动态特性主要是反射 在运行时查找对象属性
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 谷贱伤农,薪贱伤码农!

    最近被东方甄选刷屏了 截止6月21日 粉丝已经达到1749万 飞瓜数据显示 东方甄选已经是抖音带货第一名 东方甄选火起来也就是从上周那个双语带货视频在各个社群里到处转发 走到今天 也不过才一周多点的时间 从初火到大火 东方甄选 一周封神 一
  • STM32内部ADC测量时产生噪声的原因与消除的方法

    首先让我们来看一张实际项目过程中 测试发现的问题 每隔1ms 就会起来一个信号 这个信号大概是250ns 我所使用的芯片是 STM32F103RCT6 使用内部ADC测量电压 采用定时器触发采样 每隔1ms触发采样一次 经过分析初步分析 是
  • Web前端学习(二)HTML和CSS的关系

    此节 应该上手写第一个Web网页Hello World 这在之前学习HTML基础的时候已经写过了 这里不多说 本节 主要看一下HTML和CSS之间是怎么协同工作的 话不多说直接上代码 例 为Hello World添加样式
  • Eigen几何模块的使用方法

    include
  • Win11 配置 WSL2(Windows的Linux子系统)100%成功 全网最简

    打开控制面板 程序 启用或关闭 Windows 功能 勾选 Windows 虚拟机监控程序平台 适用于 Linux 的 Windows 子系统 虚拟机平台三个选项 检查是否开启BIOS虚拟化功能 任务管理器 性能 CPU 虚拟化 禁用 已启
  • Blender-骨骼蒙皮权重基本设置,批量修改权重清零,权重的镜像对称

    问题1 权重批量删除 批量清零 解决方法 1 选择物体 进入权重绘制 2 点绘制遮罩的小方块模式 3 选择 全选或者按鼠标 L局部元素选择 4 权重设置参数为0 并点权重 设置权重 OK 全都清零了 案例 和其他角色动画的眼珠自转不同 门保
  • python中object转为float_object怎么转换成float数据

    这次给大家带来object怎么转换成float数据 object转换成float数据的注意事项有哪些 下面就是实战案例 一起来看一下 数据类型转换 今天遇到一个问题 就是DataFrame类型的数据里是str型的数字 想把数字转换为int
  • 【8558】编写算法建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知存储空间)

    关注公众号程序猿从入门到入土查询更方便哦 编写算法建立的链表 实现将其分解成两个链表 其中一个全部为奇数 另一个全部为偶数 尽量利用已知存储空间 include
  • MPEG P帧编码详解

    1 当前帧与预测的当前帧相减 得到预测误差 2 预测误差进行DCT ZZ 量化 3 使用可变长编码编码预测误差并送出 3 与此同时 量化后的误差经过反量化 反zigzag 反DCT 重建误差 4 当前帧的预测误差和预测的当前帧相加 重建当前
  • Java使用多线程导入数据到Oracle中

    Oracle中的设置 多线程导入数据到Oracle中 如果是自己设置主键的值 那么肯定会遇到主键冲突的问题 例如线程A计算出的id为10 max id 1 在A线程还没有完成导入时线程B用相同办法得到的id也是10 这时两个线程都请求插入数
  • 父容器display:flex后,子元素的内部元素height:100%无效解决方法

    父容器display flex后 子元素的内部元素height 100 无效解决方法 解救办法 父类容器position relative 子元素 position absolute width 100 height 100 效果图 代码如
  • 直接进入Win10的Linux子系统文件夹

    在文件夹的路径输入 wsl 可以看到
  • Mybatis-Plus根据时间段去查询数据

    业务需求 在前端界面选择开始时间 结束时间 后台根据拿到的开始 结束时间去数据库中查询该段时间的数据集返回给前端界面 1 前端我使用的是elementUI和vue框架 最好是在前端界面进行一个简单的校验规则 对比一下开始时间和结束时间的大小
  • MongoDB 4系列(1)概述与安装和资源介绍

    文章目录 MongoDB 4 系列 1 概述与安装 前言 概述 主要特点 mongoDB的云库 MongoDB资源 Studio 3T Robo 3T morphia MongoDB Java Drivers Windows安装mongoD