热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mongodb安装包_MongoDB快速入门,掌握这些刚刚好!

虽说现在关系型数据库还是主流,但是面对某些需求的时候,需要非关系型数据库来补充它,学习一个主流的NoSQL数据库还是很有必要的。Mongo

虽说现在关系型数据库还是主流,但是面对某些需求的时候,需要非关系型数据库来补充它,学习一个主流的NoSQL数据库还是很有必要的。MongoDB是一个功能丰富的NoSQL数据库,本文整理了它最常用的部分形成了这篇入门教程,希望对大家有所帮助。

简介

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系型数据库的。

安装

以前写的MongoDB安装教程是基于3.2版本的,发现有的朋友使用新版本安装有问题,这次我们使用最新版本再来安装一次,本文所使用的MongoDB版本为4.2.5,总的来说,新版本的安装更简单了。

Windows下的安装

  • 下载MongoDB安装包,选择Windows x64版本安装,下载地址:https://www.mongodb.com/download-center/community
cdc492b405ce02df15fe5f287c7f089c.png
  • 运行MongoDB安装包并选择自定义安装,设置好安装路径;
0904467d4b205887088f6136840db5ee.png
  • 配置MongoDB,让MongoDB作为服务运行,并配置好数据目录和日志目录;
1060d1d3d29996bd26f2f8262a79631b.png
  • 取消MongoDB Compass的安装选项(不取消安装极慢),需要可自行安装;
9681c5e4767b5bd063d095b8dc51a6c5.png
  • 双击mongo.exe可以运行MongoDB自带客户端,操作MongoDB;
90a8cd0ad1c4788674b252603063b2b6.png
  • 连接成功后会显示如下信息;
de7d464c941e5fac97288814ac8bca53.png
  • 如果需要移除MongoDB服务,只需使用管理员权限运行cmd工具,并输入如下命令。

sc.exe delete MongoDB

Linux下的安装

  • 下载MongoDB的Docker镜像;

docker pull mongo:4.2.5

  • 使用Docker命令启动MongoDB服务;

docker run -p 27017:27017 --name mongo \
-v /mydata/mongo/db:/data/db \
-d mongo:4.2.5

  • 有时候我们需要为MongoDB设置账号,可以使用如下命令启动;

docker run -p 27017:27017 --name mongo \
-v /mydata/mongo/db:/data/db \
-d mongo:4.2.5 --auth

  • 然后我们需要进入容器中的MongoDB客户端;

docker exec -it mongo mongo

  • 之后在admin集合中创建一个账号用于连接,这里创建的是基于root角色的超级管理员帐号;

use admin
db.createUser({
user: 'mongoadmin',
pwd: 'secret',
roles: [ { role: "root", db: "admin" } ] });

  • 创建完成后验证是否可以登录;

db.auth("mongoadmin","secret")

  • 整个账号创建过程可以参考下图。
cf751ccf2bdd85648657c086dd14ec18.png

客户端工具

MongoDB的客户端工具有很多,上面没安装的MongoDB Compass就是其中之一,另外Navicat 15版本也有MongoDB的管理功能。这里我们使用的是一款免费的客户端工具Robo 3T(以前叫Robomongo)。

  • 首先下载客户端工具,下载地址:https://robomongo.org/download
b4992d2ee40980ac1890e3490f338ffd.png
  • 下载完成后解压,双击robo3t.exe即可使用;
02c12de591630ab1d7bbd577a95d99ff.png
  • 之后创建一个到MongoDB的连接;
71e45ed49cc07db0f9dbeaab9a0813d8.png
  • 创建连接成功以后,就可以操作MongoDB了。
68ec11edfcd046ac138ec4cc9c7a1b86.png

相关概念

MongoDB是非关系型数据库当中最像关系型数据库的,所以我们通过它与关系型数据库的对比,来了解下它的概念。

SQL概念MongoDB概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

数据库操作

  • 创建数据库,使用use命令去创建数据库,当插入第一条数据时会创建数据库,例如创建一个test数据库;

> use test
switched to db test
> db.article.insert({name:"MongoDB 教程"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB

  • 删除数据库,使用db对象中的dropDatabase()方法来删除;

> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB

集合操作

  • 创建集合,使用db对象中的createCollection()方法来创建集合,例如创建一个article集合;

> use test
switched to db test
> db.createCollection("article")
{ "ok" : 1 }
> show collections
article

  • 删除集合,使用collection对象的drop()方法来删除集合,例如删除一个article集合;

> db.article.drop()
true
> show collections

文档操作

上面的数据库和集合操作是在MongoDB的客户端中进行的,下面的文档操作都是在Robomongo中进行的。

插入文档

  • MongoDB通过collection对象的insert()方法向集合中插入文档,语法如下;

db.collection.insert(document)

  • 使用collection对象的insert()方法来插入文档,例如插入一个article文档;

db.article.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'Andy',
url: 'https://www.mongodb.com/',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})

  • 使用collection对象的find()方法可以获取文档,例如获取所有的article文档;

db.article.find({})

{
"_id" : ObjectId("5e9943661379a112845e4056"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Andy",
"url" : "https://www.mongodb.com/",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100.0
}

更新文档

  • MongoDB通过collection对象的update()来更新集合中的文档,语法如下;

db.collection.update(
,,
{
multi:
}
)
# query:修改的查询条件,类似于SQL中的WHERE部分
# update:更新属性的操作符,类似与SQL中的SET部分
# multi:设置为true时会更新所有符合条件的文档,默认为false只更新找到的第一条

  • 将title为MongoDB 教程的所有文档的title修改为MongoDB;

db.article.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})

  • 除了update()方法以外,save()方法可以用来替换已有文档,语法如下;

db.collection.save(document)

  • 这次我们将ObjectId为5e9943661379a112845e4056的文档的title改为MongoDB 教程;

db.article.save({
"_id" : ObjectId("5e9943661379a112845e4056"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Andy",
"url" : "https://www.mongodb.com/",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100.0
})

删除文档

  • MongoDB通过collection对象的remove()方法来删除集合中的文档,语法如下;

db.collection.remove(
,
{
justOne:
}
)
# query:删除的查询条件,类似于SQL中的WHERE部分
# justOne:设置为true只删除一条记录,默认为false删除所有记录

  • 删除title为MongoDB 教程的所有文档;

db.article.remove({'title':'MongoDB 教程'})

查询文档

  • MongoDB通过collection对象的find()方法来查询文档,语法如下;

db.collection.find(query, projection)
# query:查询条件,类似于SQL中的WHERE部分
# projection:可选,使用投影操作符指定返回的键

  • 查询article集合中的所有文档;

db.article.find()

/* 1 */
{
"_id" : ObjectId("5e994dcb1379a112845e4057"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Andy",
"url" : "https://www.mongodb.com/",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 50.0
}

/* 2 */
{
"_id" : ObjectId("5e994df51379a112845e4058"),
"title" : "Elasticsearch 教程",
"description" : "Elasticsearch 是一个搜索引擎",
"by" : "Ruby",
"url" : "https://www.elastic.co/cn/",
"tags" : [
"elasticearch",
"database",
"NoSQL"
],
"likes" : 100.0
}

/* 3 */
{
"_id" : ObjectId("5e994e111379a112845e4059"),
"title" : "Redis 教程",
"description" : "Redis 是一个key-value数据库",
"by" : "Andy",
"url" : "https://redis.io/",
"tags" : [
"redis",
"database",
"NoSQL"
],
"likes" : 150.0
}

  • MongoDB中的条件操作符,通过与SQL语句的对比来了解下;
操作格式SQL中的类似语句
等于{:}where title = 'MongoDB 教程'
小于{:{$lt:}}where likes <50
小于或等于{:{$lte:}}where likes <&#61; 50
大于{:{$gt:}}where likes > 50
大于或等于{:{$gte:}}where likes >&#61; 50
不等于{:{$ne:}}where likes !&#61; 50
  • 条件查询&#xff0c;查询title为MongoDB 教程的所有文档&#xff1b;

db.article.find({&#39;title&#39;:&#39;MongoDB 教程&#39;})

  • 条件查询&#xff0c;查询likes大于50的所有文档&#xff1b;

db.article.find({&#39;likes&#39;:{$gt:50}})

  • AND条件可以通过在find()方法传入多个键&#xff0c;以逗号隔开来实现&#xff0c;例如查询title为MongoDB 教程并且by为Andy的所有文档&#xff1b;

db.article.find({&#39;title&#39;:&#39;MongoDB 教程&#39;,&#39;by&#39;:&#39;Andy&#39;})

  • OR条件可以通过使用$or操作符实现&#xff0c;例如查询title为Redis 教程MongoDB 教程的所有文档&#xff1b;

db.article.find({$or:[{"title":"Redis 教程"},{"title": "MongoDB 教程"}]})

  • AND 和 OR条件的联合使用&#xff0c;例如查询likes大于50&#xff0c;并且title为Redis 教程或者"MongoDB 教程的所有文档。

db.article.find({"likes": {$gt:50}, $or: [{"title": "Redis 教程"},{"title": "MongoDB 教程"}]})

其他操作

Limit与Skip操作

  • 读取指定数量的文档&#xff0c;可以使用limit()方法&#xff0c;语法如下&#xff1b;

db.collection.find().limit(NUMBER)

  • 只查询article集合中的2条数据&#xff1b;

db.article.find().limit(2)

  • 跳过指定数量的文档来读取&#xff0c;可以使用skip()方法&#xff0c;语法如下&#xff1b;

db.collection.find().limit(NUMBER).skip(NUMBER)

  • 从第二条开始&#xff0c;查询article集合中的2条数据&#xff1b;

db.article.find().limit(2).skip(1)

排序

  • 在MongoDB中使用sort()方法对数据进行排序&#xff0c;sort()方法通过参数来指定排序的字段&#xff0c;并使用1和-1来指定排序方式&#xff0c;1为升序&#xff0c;-1为降序&#xff1b;

db.collection.find().sort({KEY:1})

  • 按article集合中文档的likes字段降序排列&#xff1b;

db.article.find().sort({likes:-1})

索引

  • 索引通常能够极大的提高查询的效率&#xff0c;如果没有索引&#xff0c;MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

  • MongoDB使用createIndex()方法来创建索引&#xff0c;语法如下&#xff1b;

db.collection.createIndex(keys, options)
# background&#xff1a;建索引过程会阻塞其它数据库操作&#xff0c;设置为true表示后台创建&#xff0c;默认为false
# unique&#xff1a;设置为true表示创建唯一索引
# name&#xff1a;指定索引名称&#xff0c;如果没有指定会自动生成

  • 给title和description字段创建索引&#xff0c;1表示升序索引&#xff0c;-1表示降序索引&#xff0c;指定以后台方式创建&#xff1b;

db.article.createIndex({"title":1,"description":-1}, {background: true})

  • 查看article集合中已经创建的索引&#xff1b;

db.article.getIndexes()

/* 1 */
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.article"
},
{
"v" : 2,
"key" : {
"title" : 1.0,
"description" : -1.0
},
"name" : "title_1_description_-1",
"ns" : "test.article",
"background" : true
}
]

聚合

  • MongoDB中的聚合使用aggregate()方法&#xff0c;类似于SQL中的group by语句&#xff0c;语法如下&#xff1b;

db.collection.aggregate(AGGREGATE_OPERATION)

  • 聚合中常用操作符如下&#xff1b;
操作符描述
$sum计算总和
$avg计算平均值
$min计算最小值
$max计算最大值
  • 根据by字段聚合文档并计算文档数量&#xff0c;类似与SQL中的count()函数&#xff1b;

db.article.aggregate([{$group : {_id : "$by", sum_count : {$sum : 1}}}])

/* 1 */
{
"_id" : "Andy",
"sum_count" : 2.0
}

/* 2 */
{
"_id" : "Ruby",
"sum_count" : 1.0
}

  • 根据by字段聚合文档并计算likes字段的平局值&#xff0c;类似与SQL中的avg()语句&#xff1b;

db.article.aggregate([{$group : {_id : "$by", avg_likes : {$avg : "$likes"}}}])

/* 1 */
{
"_id" : "Andy",
"avg_likes" : 100.0
}

/* 2 */
{
"_id" : "Ruby",
"avg_likes" : 100.0
}

正则表达式

  • MongoDB使用$regex操作符来设置匹配字符串的正则表达式&#xff0c;可以用来模糊查询&#xff0c;类似于SQL中的like操作&#xff1b;

  • 例如查询title中包含教程的文档&#xff1b;

db.article.find({title:{$regex:"教程"}})

  • 不区分大小写的模糊查询&#xff0c;使用$options操作符&#xff1b;

db.article.find({title:{$regex:"elasticsearch",$options:"$i"}})

结合SpringBoot使用

具体参考&#xff1a;《mall整合Mongodb实现文档操作》

推荐阅读&#xff1a;

  • 后浪&#xff1f;

  • 面试官真是搞笑&#xff01;让实现线程安全的单例&#xff0c;又不让使用synchronized&#xff01;

  • 又一P1故障&#xff0c;锅比脸圆

  • 面试官&#xff1a;为什么 Spring Boot 的 jar 可以直接运行&#xff1f;

5eface7d74b4e6bbebfd8e7dd20e012d.png喜欢我可以给我设为星标哦5eface7d74b4e6bbebfd8e7dd20e012d.png

f6f215a92199428fa96930be049b58c6.png2028afbbe76d40b66ac4ceaed2ebc996.png

好文章&#xff0c;我 在看 

ba08d8cb4876be970ccb2daa41e948e3.png



推荐阅读
  • vue使用
    关键词: ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
  • MySQL笔记_MySQL笔记1|数据库17问17答
    本文由编程笔记#小编为大家整理,主要介绍了MySQL笔记1|数据库17问17答相关的知识,希望对你有一定的参考价值。 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
author-avatar
手机用户2502870493
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有