专栏首页人工智能LeadAImongoDB的安装及基本使用

mongoDB的安装及基本使用

mongoDB简介

1、NoSQL数据库

数据库:进行高效的、有规则的进行数据持久化存储的软件

NoSQL数据库:Not only sql,指代非关系型数据库

优点:高可扩展性、分布式计算、低成本、灵活架构、半结构化数据、简化关联关系 缺点:没有标准化、有限查询、不直观

常见NoSQL(http://www.runoob.com/mongodb/nosql.html)数据库

  • 列存储:Hbase、Cassandra、Hypertable
  • 文档存储:MongoDB、CouchDB
  • k-v存储:TokyoCabinet、BerkeleyDB、MemcacheDB、redis
  • 对象存储:Neo4J、Versant
  • Xml数据库:BerkeleyDB、BaseX

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

2、MongoDB概述

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

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

优点:

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

3、MongoDB术语解释

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

4、MongoDB基本语法——数据类型

  • 集合就是关系型书库中的表
  • 文档对应关系型数据库中的行
  • 文档:就是一个JSON对象,由KEY=VALUE键值对构成

{“name”:”admin”, “gender”:”男”}

  • 集合:存储多个文档,结构不固定

{“name”:”admin”, “gender”:”男”} {“name”:”manager”, “age”:23} {“name”:”manager”, “phone”:”16868686868”}

  • 数据库:存储多个集合
  • 服务器:一个服务器中可以包含多个数据库
  • ObjectID:文档id
  • String:字符串
  • Boolean:布尔值
  • Integer:整数
  • Double:浮点数
  • Arrays:数组或者列表
  • Object:嵌入的文档
  • Null:空值
  • Timestamp:时间戳
  • Date:日期时间

MYSQL的安装

回顾一下MySQL在ubuntu的安装

在终端输入命令

sudo apt-get install mysql-server sudo apt-get install mysql-client sudo apt-get install libmysqlclient-dev #安装过程中会提示设置密码什么的,注意设置了不要忘了

安装完毕后输入以下命令检测是否安装成功

sudo netstat -tap | grep mysql

通过上述命令检查之后,如果看到有mysql 的socket处于 listen 状态则表示安装成功。

登陆mysql数据库可以通过如下命令:

mysql -u root -p

-u 表示选择登陆的用户名, -p 表示登陆的用户密码,上面命令输入之后会提示输入密码,此时输入密码就可以登录到mysql。

然后通过 show databases; 就可以查看当前的数据库。

对于Mysql数据库的操作用法之前总结过,详情见

数据库 - MySQL(http://www.jianshu.com/p/1f32e9eebfae) MySQL高级(http://www.jianshu.com/p/9e8d9a64cfcb)

MongoDB下载安装

官方网站(https://www.mongodb.com/) 注意:偶数为稳定版,如1.6,奇数为开发版,如1.7

1、Windows下MongoDB安装

直接下载msi文件或者点击All Verison Binaries下载都行

我这里用的是zip安装,安装完毕后,

当前所在磁盘目录下创建data文件夹

data文件夹中创建db文件夹和log文件夹

在运行窗口输入命令启动数据库

mongod --dbpath d:/data/db

启动mongoDB数据库

打开一个新的窗口输入命令mongo,用于数据库操作

打开一个新的窗口,用于数据库操作

2、Linux下MongoDB安装

MongoDB安装很简单,无需下载源文件,可以直接用apt-get命令进行安装。

1、打开终端,输入以下命令:

sudo apt-get install mongodb

2 . 安装完成后,在终端输入以下命令查看MongoDB版本:

mongo -version

显示版本信息,即安装成功

3、启动mongo数据库

在终端输入命令

sudo mongo

启动mongo数据库

3、安装pymongo

PyMongo是Mongodb的Python接口开发包,是使用python和Mongodb的推荐方式。

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

pip install pymongo 默认安装 pip install pymongo==2.8 安装指定版本 pip install –upgrade pymongo 升级PyMongo

安装成功

命令运行成功无报错

4、MongoDB基本使用

1.基本操作

mongoDB将数据存储为一个文档;

数据由 key=value 的键值对的形式组成;

数据的操作:增删改查;

nosql三元素:数据库 – 集合 – 文档 [--域]。

2.基本语法

数据库操作:

db:查看当前指向的数据库;

show dbs:查看当前所有的数据库;

use <数据库名称>:指向一个数据库; Use数据库不会创建数据库,如果操作数据会自动创建数据库;

db.dropDatabase():删除当前指向的数据库。

集合操作:

show collections:查看当前数据库所有集合;

db.createCollection(<c_name> [, options]):创建一个集合;

db.<集合名称>.drop():删除指定的集合;

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

增加数据:

语法:db.<集合名称>.insert(文档);

集合可以是原来存在的,可以是不存在的;

文档:就是JSON格式表示的数据;

简单查询:db.<集合名称>.find()查询指定集合的数据。

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

更新数据:

语法:db.<集合名称>.update(<query>, <update>,[multi:<boolean>]);

指定属性更新:$opration;

multi:默认false更新符合条件第一条,设置true全集合更新

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

保存数据:

语法:db.<集合名称>.save(文档);

特征:[ _id ]如果数据不存在就添加,如果数据存在修改;

删除数据:

语法:db.<集合名称>.remove(<query>, {justone:<boolean>});

参数query:删除文档的条件;

参数justOne:设置为true或者1,删除一条;默认false删除多条;

查询数据

find([{文档条件}]):全集合查询;

findOne([{文档条件}]):查询第一个;

pretty():将查询结果格式化展示;

比较运算符

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

逻辑运算符:

逻辑与:并且运算,默认操作,无运算符;

逻辑或:或者运算,$or

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

范围运算符:

**$in:判断指定条件是否包含在某个范围内;**$nin:判断指定条件是否不包含在某个范围内

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

限制查询条数

<find>.limit(count)

排序

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

统计

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

去重

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

分页

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

MongoDB与python

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

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

开启mongo,运行代码

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

本文分享自微信公众号 - 人工智能LeadAI(atleadai),作者:_知几

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 分布式资源管理

    DRM(分布式资源管理) 大型的分布式系统中存在很多的配置文件,分布式资源管理解决了配置文件同步更新的问题,不仅仅是配置文件,此技术还可以支持缓存数据的同步一致...

    用户1332428
  • 讨厌算法的程序员 | 第六章 归并排序

    分而治之 从算法设计的分类上来说,插入排序属于增量方法。在排序好子数组A[1 ‥ j-1]后,再将单个元素A[j]插入子数组的适当位置,产生排序好的子数组A[1...

    用户1332428
  • TensorFlow从1到2 | 前言

    本篇是《TensorFlow从1到2》的前言,本主题将会涵盖现代卷积网络基础,及其TensorFlow实现。 我将延续先前的承诺: 它不会止于翻译和笔记、语言...

    用户1332428
  • 十年数据库流行度,哪款是你的最爱

    准备写一个系列,在年终岁尾之际,盘一盘大家或者是本人比较关心的一些数据。文章内容会包括数据获取的过程和数据可视化结果。今天先来看看各大数据库在过去一年的表现吧!

    周萝卜
  • Oracle 数据库名、实例名、Oracle_SID

    本文参考自ORACLE 数据库名、实例名、ORACLE_SID的区别,纯属读书笔记,加深记忆 在ORACLE7、8数据库中只有数据库名(db_name)和数据库...

    郑小超.
  • Django使用多数据库For pyth

    在django项目中, 一个工程中存在多个APP应用很常见;有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接。 在Django的setti...

    py3study
  • 数据库连接工具DBeaver

    dbeaver是免费和开源(GPL)为开发人员和数据库管理员通用数据库工具。

    Learning_斌
  • 5G风起,未来数据库有哪些关键词?

    在自己工作的领域中,发现快乐是我坚持做技术的动力。而技术域其实就是一个画圆的过程,当你发现你的圈圈画得越大,需要求知的东西也就越多。每天必须保持一种持续学习,和...

    TVP官方团队
  • 2019,为什么“去O” 势在必行?

    作者简介:韩锋,腾讯云数据库TVP专家,CCIA(中国计算机行业协会)常务理事,Oracle ACE,DBAplus社群联合创始人,ACMUG&CRUG社区顾问...

    腾讯云数据库 TencentDB
  • Python连接MySQL数据库

    python2.X使用的是mysqldb库去连接MySQL服务器,而在python3.X中使用的是PyMySQL库,所以我们需要使用命令pip inst...

    菜鸟小白的学习分享

扫码关注云+社区

领取腾讯云代金券