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

[28]mongoDB的安装及基本使用

文章目录1.mongoDB简介1.1NoSQL数据库1.2.MongoDB概述1.3.Mongodb术语解释1.4.MongoDB基本语法——数据类型2.Mongodb下载安装2.

文章目录

    • 1.mongoDB简介
      • 1.1 NoSQL数据库
      • 1.2.MongoDB概述
      • 1.3.Mongodb术语解释
      • 1.4.MongoDB基本语法——数据类型
    • 2.Mongodb下载安装
      • 2.1.Windows下Mongodb安装
      • 2.2.Linux下Mongodb安装
        • 2.2.1 yum 或 apt-get 安装
        • 2.2.2 安装包安装
          • 上传解压
          • 配置conf与目录
          • 启动测试
          • 授权登录
          • 配置mongodb服务开机启动
    • 3.安装pymongo
    • 4.Mongodb基本使用
      • 4.1.基本操作
      • 4.2.基本语法
        • 查询数据
    • 5.Mongodb与python交互


1.mongoDB简介

mongo全版本下载地址:https://www.mongodb.org/dl/linux/

1.1 NoSQL数据库


  • 数据库:进行高效的、有规则的进行数据持久化存储的软件
  • NoSQL数据库:Not only sql,指代非关系型数据库
    • 优点:高可扩展性、分布式计算、低成本、灵活架构、半结构化数据、简化关联关系
    • 缺点:没有标准化、有限查询、不直观
  • 常见NoSQL数据库
    • 列存储:**Hbase、**Cassandra、Hypertable
    • 文档存储:**MongoDB、**CouchDB
    • k-v存储:TokyoCabinet、BerkeleyDB、MemcacheDB、redis
    • 对象存储:Neo4J、Versant
    • Xml数据库:BerkeleyDB、BaseX

注:黑色加粗的为常用的数据库

1.2.MongoDB概述

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

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

优点:

  • C++编写的运行稳定性能高的数据
  • 模式自由
  • 面向集合
  • 完整索引支持
  • 复制和高可用性


1.3.Mongodb术语解释


  • database–database:数据库
  • table – collection:数据库表 – 集合
  • row – document: 数据记录 – 文档
  • column – field:数据字段 – 域
  • index – index :索引 – 索引
  • table-join – None:表连接~
  • primary key – primary key :主键


1.4.MongoDB基本语法——数据类型


image

2、解压安装

解压:tar -zxvf mongodb-linux-x86_64-4.0.6.tgz
移动:mv ./mongodb-linux-x86_64-4.0.6 /usr/local/mongodb

image

配置conf与目录

1、进入mongodb目录
cd /usr/local/mongodb/

image

2、创建db目录和日志文件

mkdir -p ./data/db
mkdir -p ./logs
touch ./logs/mongodb.log

image

3、创建mongodb.conf文件

vim mongodb.conf

添加以下内容

#端口号
port=27017
#db目录
dbpath=/usr/local/mongodb/data/db
#日志目录
logpath=//usr/local/mongodb/logs/mongodb.log
#后台
fork=true
#日志输出
logappend=true
#允许远程IP连接
bind_ip=0.0.0.0
maxConns=100 #最大同时连接数
noauth=true #不启用验证
journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
#即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。
storageEngine=wiredTiger #存储引擎有mmapv1、wiretiger、mongorocks

启动测试

1、启动

./bin/mongod --config mongodb.conf

image

2)连接

./bin/mongo

image

3)测试

image

授权登录

在日常工作中我们不可能把数据库设置为免认证登录并暴露在公网下,所以我们需要为数据库添加用户名和密码,具体操作如下:
vim mongodb.conf

打开后如图:

image

我们把noauth那一行,前面加上#,注释掉。
再在最后一行添加 auth = true
完整代码如下:

port=27017 #端口
dbpath= /usr/mongodb/db #数据库存文件存放目录
logpath= /usr/mongodb/log/mongodb.log #日志文件存放路径
logappend=true #使用追加的方式写日志
fork=true #以守护进程的方式运行,创建服务器进程
maxConns=100 #最大同时连接数
#noauth = true #不启用验证
journal=true #每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)。
#即使宕机,启动时wiredtiger会先将数据恢复到最近一次的checkpoint点,然后重放后续的journal日志来恢复。
storageEngine=wiredTiger #存储引擎有mmapv1、wiretiger、mongorocks
bind_ip = 0.0.0.0 #这样就可外部访问了,例如从win10中去连虚拟机中的MongoDB
auth = true #用户认证

保存退出,启动数据库。
在添加用户名之前应该先执行./mongo命令先打开mongodb数据库

依次执行下列命令 添加用户名

//使用admin数据库
use admin//给admin数据库添加管理员用户名和密码,用户名和密码请自行设置
db.createUser({user:"admin",pwd:"123456",roles:["root"]})//验证是否成功,返回1则代表成功
db.auth("admin", "123456")//切换到要设置的数据库,以test为例
use test//为test创建用户,用户名和密码请自行设置。
db.createUser({user: "test", pwd: "123456", roles: [{ role: "dbOwner", db: "test" }]})

执行完后,ctrl + c结束shell,并通过关闭,打开进行重启数据库。

配置mongodb服务开机启动

1)设置mongodb.service开机服务启动

cd /lib/systemd/system
cat >>mongodb.service<<"EOF"
[Unit] 
Description&#61;mongodb 
After&#61;network.target remote-fs.target nss-lookup.target [Service] 
Type&#61;forking 
ExecStart&#61;/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf 
ExecReload&#61;/bin/kill -s HUP $MAINPID 
ExecStop&#61;/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongodb.conf 
PrivateTmp&#61;true [Install] 
WantedBy&#61;multi-user.target

然后设置mongodb.service权限

chmod &#43;x mongodb.service#启动服务
systemctl start mongodb.service    #停止服务
systemctl stop mongodb.service#添加开机自启动
systemctl enable mongodb.service#重启服务
systemctl restart mongodb.service

2&#xff09;添加环境变量

1、直接用export命令&#xff1a;

export PATH&#61;$PATH:/usr/local/mongodb/bin

2、修改profile文件&#xff1a;

cat >>/etc/profile<<"EOF"
export PATH&#61;"$PATH:/usr/local/mongodb/bin"#刷新profile文件&#xff1a;
source  /etc/profile

3、 修改.bashrc文件&#xff1a;

cat >>/root/.bashrc<<"EOF"
export PATH&#61;"$PATH:/usr/local/mongodb/bin"

上述三步依次执行完毕&#xff0c;环境变量配置完成&#xff01;&#xff01;&#xff01;&#xff01;
重启服务器&#xff0c;输入mongo 回车就有了。。。。。

3.安装pymongo

PyMongo是Mongodb的Python接口开发包&#xff0c;是使用python和Mongodb的推荐方式。

用Python操作MongoDB需要通过PyMongo,输入命令安装

pip install pymongo 默认安装
pip install pymongo&#61;&#61;2.8 安装指定版本
pip install –upgrade pymongo 升级PyMongo

4.Mongodb基本使用


4.1.基本操作


  • mongoDB将数据存储为一个文档
  • 数据由 key&#61;value 的键值对的形式组成
  • 数据的操作&#xff1a;增删改查
  • nosql三元素&#xff1a;数据库 – 集合 – 文档 [–域]

4.2.基本语法


  • 数据库操作
    • db&#xff1a;查看当前指向的数据库
    • show dbs&#xff1a;查看当前所有的数据库
    • use <数据库名称>&#xff1a;指向一个数据库
      Use数据库不会创建数据库&#xff0c;如果操作数据会自动创建数据库
    • db.dropDatabase()&#xff1a;删除当前指向的数据库
  • 集合操作
    • show collections&#xff1a;查看当前数据库所有集合
    • db.createCollection( [, options])&#xff1a;创建一个集合
    • db.<集合名称>.drop()&#xff1a;删除指定的集合

show collections 查看当前库中所有的集合&#xff0c;后面的collections不要加括号db.createCollection(name, [optinos])
创建一个名称为name的集合&#xff0c;后面的options表示创建的附带选项
db.createCollection(“emp”)&#xff1a;创建一个名称为emp的名称的集合
db.createCollection(“dept”, {“capped”: true, size: 5})&#xff1a;capped默认false
表示不设置上限&#xff0c;true表示设置上限需要设置size参数~表示达到上限时会将之前的数据覆盖

  • 增加数据
    • 语法&#xff1a;db.<集合名称>.insert(文档)
    • 集合可以是原来存在的&#xff0c;可以是不存在的
    • 文档&#xff1a;就是JSON格式表示的数据
    • 简单查询&#xff1a;**db.<集合名称>.find()**查询指定集合的数据

db.student.insert({name:”jerry”, gender:”男”})db.student.insert({_id:”1”, name:”tom”, gender:”女”, age:18})

  • 更新数据
    • 语法&#xff1a;db.<集合名称>.update(, ,[multi:])
    • 指定属性更新&#xff1a;$opration
    • multi&#xff1a;默认false更新符合条件第一条&#xff0c;设置true全集合更新

#更新符合条件的文档
db.student.update({name:”tom”}, {name:”jerry”})#更新符合条件的文档中符合条件的域
db.student.update({name:”tom”}, {$set:{name:”jerry”}})#更新符合条件的多行文档及对应的域
db.student.update({}, {$set:{name:”donghua”}}, {multi:true})

  • 保存数据

    • 语法&#xff1a;db.<集合名称>.save(文档)
    • 特征&#xff1a;[ _id ]如果数据不存在就添加&#xff0c;如果数据存在修改
  • 删除数据

    • 语法&#xff1a;db.<集合名称>.remove(, {justone:})
    • 参数query&#xff1a;删除文档的条件
    • 参数justOne&#xff1a;设置为true或者1&#xff0c;删除一条&#xff1b;默认false删除多条

查询数据


  • 基本查询

    • find([{文档条件}])&#xff1a;全集合查询
    • findOne([{文档条件}])&#xff1a;查询第一个
    • pretty()&#xff1a;将查询结果格式化展示
  • 比较运算符

默认判断&#xff0c;无运算符$lt&#xff1a;little~小于 <$lte&#xff1a;little or equals~小于等于 <&#61;$gt&#xff1a;granter~大于 >$gte&#xff1a;granter or equals~大于等于 >&#61;#查询名称为jerry的学生
db.student.find({name:”jerry”})#查询年龄已经适婚年龄的学员
db.student.find({age:{$gte:20}})

  • 逻辑运算符
    • 逻辑与&#xff1a;并且运算&#xff0c;默认操作&#xff0c;无运算符
    • 逻辑或&#xff1a;或者运算&#xff0c;$or

#查询年龄已经适婚年龄并且性别为女的学员
db.student.find({age:{$gte:20}, gender:”女”})#查询年龄大于18或者性别为男的学员
db.student.find({$or:[{age:{$gt:18}, {gender:”女”}]})

  • 范围运算符
    • $in&#xff1a;判断指定条件是否包含在某个范围内
    • $nin&#xff1a;判断指定条件是否不包含在某个范围内

#查询年龄在18或者20的学员
db.student.find({age: {$in:[18,20]}})#查询年龄不是18 的学员
db.student.find({age: {$nin : [20]}})

  • 限制查询条数

.limit(count)

  • 排序

.sort({字段&#xff1a;1/-1, ...})
db.student.find().sort({name:1})1.表示升序排列 -1表示降序排列&#xff0c;可以指定多个字段

  • 统计

.count()db.<集合名称>.count({条件})两种操作方式
1.查询结果&#xff0c;通过count()统计数据
2. 通过count()直接添加条件统计数据

  • 去重

db.<集合名称>.distinct(“去重域名称”, {条件})查询数据列表中&#xff0c;所有的年龄分布情况
db.student.distinct(“age”, {})

  • 分页

#隔n个数据查询m个数据
db.hero.find().pretty().limit(m).skip(n)

5.Mongodb与python交互

之前学习了爬虫&#xff0c;现在我们把爬取得到的数据存储于Mongodb中

#爬取英雄联盟英雄信息详情&#xff0c;并存储#-*- coding:utf-8 -*-
import pymongo
import requests
from bs4 import BeautifulSoup#建立于MongoClient 的连接
client &#61; pymongo.MongoClient(&#39;localhost&#39;,27017)
#得到数据库
hero &#61; client[&#39;hero&#39;]
#得到一个数据集合
sheet_tab &#61; hero[&#39;sheet_tab&#39;]
url &#61; &#39;http://lol.duowan.com/hero/&#39;
req &#61; requests.get(url)
soup &#61; BeautifulSoup(req.text,&#39;html.parser&#39;)
links &#61; soup.find(id&#61;"champion_list").find_all(&#39;a&#39;)
for link in links:link &#61; link[&#39;href&#39;]requ &#61; requests.get(link)sop &#61; BeautifulSoup(requ.text,&#39;html.parser&#39;)data &#61; {&#39;title&#39; : sop.find(&#39;h2&#39;,class_&#61;"hero-title").get_text(),&#39;name&#39; : sop.find(&#39;h1&#39;,class_&#61;"hero-name").get_text(),&#39;tags&#39; : sop.find(&#39;div&#39;,class_&#61;"hero-box ext-attr").find_all(&#39;span&#39;)[1].get_text(),&#39;story&#39; : sop.find(&#39;div&#39;,class_&#61;"hero-popup").find_all(&#39;p&#39;)[0].get_text(),}sheet_tab.insert_one(data)

开启mongo,运行代码

通过Robo 3T可视化工具我们可以看到抓取到了137条数据&#xff0c;并且已存储到mongodb中

参考&#xff1a;https://www.cnblogs.com/xiaoyaojinzhazhadehangcheng/p/12156597.html
https://www.cnblogs.com/jasonLiu2018/p/13088971.html


推荐阅读
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • Hadoop的分布式架构改进与应用
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Redis概念
    Redis概念:redis是一款高性能的NOSQL系列的非关系型数据库什么是NOSQLNOSQL(NoSQLNotOnlySQL),意即不仅仅是SQL,是一项全新的数据库理念, ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • 在Linux系统中,目录结构遵循文件系统层次标准(FHS),确保了系统的组织性和可维护性。其中,`/bin`目录是FHS要求必须存在的目录之一,主要存放了在单用户维护模式下仍可执行的基本命令和工具。这些命令不仅对root用户可用,普通用户也能使用,以确保系统在最小化运行状态下仍能进行基本的操作和管理。 ... [详细]
  • 全面解析:Hadoop技术栈中的Linux操作系统概览
    全面解析:Hadoop技术栈中的Linux操作系统概览 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • 优化后的标题:PHP分布式高并发秒杀系统设计与实现
    PHPSeckill是一个基于PHP、Lua和Redis构建的高效分布式秒杀系统。该项目利用php_apcu扩展优化性能,实现了高并发环境下的秒杀功能。系统设计充分考虑了分布式架构的可扩展性和稳定性,适用于大规模用户同时访问的场景。项目代码已开源,可在Gitee平台上获取。 ... [详细]
  • 欢迎来到Netgen新时代:探索网络生成技术的无限可能
    欢迎进入Netgen的新时代:探索网络生成技术的无限潜力。本文将详细介绍如何编译下载的Netgen源代码,生成Netgen程序,并提供开发所需的库nglib。此外,还将探讨Netgen在现代网络设计与仿真中的应用前景,以及其在提高网络性能和可靠性方面的关键作用。 ... [详细]
  • 深入RTOS实践,面对原子操作提问竟感困惑
    在实时操作系统(RTOS)的实践中,尽管已经积累了丰富的经验,但在面对原子操作的具体问题时,仍感到困惑。本文将深入探讨RTOS中的原子操作机制,分析其在多任务环境下的重要性和实现方式,并结合实际案例解析常见的问题及解决方案,帮助读者更好地理解和应用这一关键技术。 ... [详细]
  • 分布式一致性算法:Paxos 的企业级实战
    一、简介首先我们这个平台是ES专题技术的分享平台,众所周知,ES是一个典型的分布式系统。在工作和学习中,我们可能都已经接触和学习过多种不同的分布式系统了,各 ... [详细]
  • 「驭龙」开源主机入侵检测系统了解一下
    「驭龙」开源主机入侵检测系统了解一下 ... [详细]
  • 1.关系型数据库永久性保存数据的仓库php的变量只是php脚本执行期间,临时性保存变量的空间【使用内存空间临时保存】关系型数据库:利用二者的关系来描述实体的信息。【利用二维表字段名 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 工作以来接触到的技术流
    2019独角兽企业重金招聘Python工程师标准下面是工作以来接触到的技术平台,以及技术方案。部分在项目中深入过,部分仅选型、实践过。不断补充中. ... [详细]
author-avatar
重生之羽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有