热门标签 | 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


推荐阅读
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
    本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • Python 领跑!2019年2月编程语言排名更新
    根据最新的编程语言流行指数(PYPL)排行榜,Python 在2019年2月的份额达到了26.42%,稳坐榜首位置。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • Markdown 编辑技巧详解
    本文介绍如何使用 Typora 编辑器高效编写 Markdown 文档,包括代码块的插入方法等实用技巧。Typora 官方网站:https://www.typora.io/ 学习资源:https://www.markdown.xyz/ ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 开发心得:利用 Redis 构建分布式系统的轻量级协调机制
    开发心得:利用 Redis 构建分布式系统的轻量级协调机制 ... [详细]
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社区 版权所有