MongoDB快速上手

1.  MongoDB简介

MongoDB是一个跨平台的基于Key_Value键值对形式保存数据的NoSQL文档类型数据库。

NoSQL(not only sql)数据库,泛指非关系型数据库。

1.1 NoSQL数据库的特点

不需要预定义模式

不需要事先定义数据模式,预定义表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。

无共享架构

相对于将所有数据存储的存储区域网络中的全共享架构。NoSQL往往将数据划分后存储在各个本地服务器上。因为从本地磁盘读取数据的性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。

弹性可扩展

可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移。

分区

相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上面。并且通常分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。

异步复制

和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会被网络传输引起迟延。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。

l  BASE

相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。BASE是最终一致性和软事务。

1.2 NoSql数据库的分类


分类


Examples举例


典型应用场景


数据模型


优点


缺点


键值(key-value)


Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB


内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。


Key 指向 Value 的键值对,通常用hash table来实现


查找速度快


数据无结构化,通常只被当作字符串或者二进制数据


列存储数据库


Cassandra, HBase, Riak


分布式的文件系统


以列簇式存储,将同一列数据存在一起


查找速度快,可扩展性强,更容易进行分布式扩展


功能相对局限


文档型数据库


CouchDB, MongoDb


Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)


Key-Value对应的键值对,Value为结构化数据


数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构


查询性能不高,而且缺乏统一的查询语法。


图形(Graph)数据库


Neo4J, InfoGrid, Infinite Graph


社交网络,推荐系统等。专注于构建关系图谱


图结构


利用图结构相关算法。比如最短路径寻址,N度关系查找等


很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。

1.3 MongoDB数据库特点

MongoDB数据库有以下特点:

l  跨平台、支持语言众多

l  模式自由

l  支持文件存储

l  易于水平扩展

l  复制集机制

l  多级索引

l  面向集合存储

l  丰富的查询语句

综合以上特点,MongoDB适用于大数据量、高并发、弱事务的互联网应用。

2. MongoDB安装

这里主要介绍在windows平台下的安装(其他平台的安装请到官方下载对应的安装介质)。

2.1 下载安装介质

MongoDB下载地址如下: https://www.mongodb.org/downloads

下载对应的windows平台下的版本。

MongoDBVUE(可视化工具)下载地址:http://www.mongovue.com/downloads/

2.2 安装

下载完成之后,直接点击安装即可。

2.2.1 将MongoDB添加到环境变量

即将MongoDB安装目录的bin目录路径,如下所示:C:\Program Files\MongoDB\Server\3.0\bin

添加到环境变量path中去。要想检测是否添加成功,可以在命令行里,输入Mongo –version查看安装的mongodb的版本号,结果如下图所示:

2.2.2 启动MongoDB

在启动mongodb之前,需要先为其指定对应的Data(即数据存储)目录,log(日志)目录,目录结构如下图所示:

然后在命令行里输入以下命令:

C:\WINDOWS\system32>mongod --dbpath D:\MangoDB\Data --logpath D:\MangoDB\Log\mongodb.log –logappend

该命令主要是为mongodb指定了数据存储目录和日志目录,在浏览器里输入:

http://localhost:27017

看到如下内容,即表明服务已经启动了:

It looks like you are trying to access MongoDB over HTTP on the native driver port.

如果该命令窗口关闭,则该数据库服务就停止了。但是这样有一个问题,每次开启服务的时候,都需要输入这行命令,会很费事。我们有两种方式去解决这个问题,如下:

l  将以上的命令保存为一个bat文件,每次启动服务的时候点击即可(即上图中所示的Start文件)

l  将MongoDB添加到服务中去,以服务的形式启动,如下所示:

在命令行中输入以下命令:

C:\WINDOWS\system32>mongod --dbpath D:\MangoDB\Data --logpath D:\MangoDB\Log\mongodb.log --install --serviceName "MongoDB"

在命令行里输入:net start MongoDB

结果如下:

输入:net stop MongoDB,停止服务。

3. MongoDB数据模型

MongoDB是面向集合存储的文档型数据库,其基本概念与常用的关系型数据库有所不同。

3.1 文档

文档是MongoDB最核心的的概念,本质上是一种类JSON的BJSON格式的数据。

BSON是在JSON的基础上加入了一些新的数据类型,包括日期、int32,int64等。

BSON是由键值对组成,具有轻量性、可遍历、高效性三个特性。

3.2 集合

将一组相关的文档放到一起就组成了集合。

文档相当于关系数据库中的一条信息,集合就相当于关系型数据库中的表。

3.3 数据库

多个文档组成集合,多个集合组成数据库。一个MongoDB示例可以承载多个数据库,每个数据库都有独立的权限。

3.4数据类型

3.4.1 基本数据类型

Null: 空值或不存在的字段

布尔:true或false

数值类型:只支持int32,int64,double

字符串:

二进制数据:可以保存由任意字节组成的字符串

正则表达式:主要用于查询。

例如:{name:/olive/},name字段包含olive

    {name:/olive/i},name字段包含olive,且不区分大小写

{name:/^olive/i},name字段以olive开头,且不区分大小写

Js代码

3.4.2 Date日期

Mongodb中日期是一个64位的整数

Mongodb存储时间时,先转化为utc时间。

3.4.3 Timestamp

Timestamp只供mongodb内部使用,用于记录操作的详细时间,跟date类型没有关系

3.4.4 Objectid

Objectid由24个十六进制字符构成,每个字节存储两位十六进制数字,总共需要12字节存储空间。

3.4.5 内嵌文档

文档作为键的值,称之为内嵌文档。内嵌文档使数据不用保存成扁平结构的键值对,从而使数据组织方式更加自然。

示例:

User={“name”:”olive”,”address”:{“province”:”henan”,”city”:”zhengzhou”}}

4. MongoDB数据更新

这里的示例主要是使用python语言来进行演示。

引入MongoDB对应的Python的驱动,首先安装pymongo包,在命令行里输入:pip install pymongo。安装完成之后在代码里引用。

创建数据库的链接:

# -*- conding:utf-8 -*-
import pymongo
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8‘)
conn = pymongo.MongoClient(‘localhost‘, 27017)
db = conn.MDB//创建MDB数据库
dt = db.users//创建users数据表

创建完成之后,可以打开MongoVue查看已创建的数据库、数据表如下图所示:

4.1 数据插入

4.1.1 insert

Insert函数只能作用于一个集合,如果该集合不存在,则数据库服务会自动创建。插入时如果没有指定_id的字段,则自动添加该字段。

#insert
user0 = { ‘name‘:‘Olive‘,‘sex‘:‘male‘, ‘age‘:21 }
dt.insert(user0)
user1 = { ‘name‘:‘Tom‘,‘sex‘:‘Female‘, ‘age‘:24 }
dt.insert(user1)
user2 = { ‘name‘:‘Jack‘,‘sex‘:‘male‘, ‘age‘:25 }
dt.insert(user2)
user3 = { ‘name‘:‘Kite‘,‘sex‘:‘male‘, ‘age‘:20 }
dt.insert(user3)

在MongoVUE查看已插入的数据,如下图所示:

除此之外,也可以给insert方法传入一个list参数,如下:

dt.insert([{‘name‘:‘Kobe‘,‘age‘:37},{‘name‘:‘Jim‘,‘age‘:30}])

再次查看MongoVUE,如下图所示(新增2条数据):

4.1.2 insert_many()

如果要大批量的插入数据也可以使用insert_many()方法,使用如下:

users = [{‘name‘: ‘Olive‘+str(i)} for i in xrange(101)]
dt.insert_many(users)

4.2 数据更新

修改聚集内的记录:

dt.update(
filter, update_field, upsert, multi )

filter : update的查询条件

update_field:要更新的字段、更新值(类似于sql语句中的set)

upsert:如果不存在update的记录,true为插入,false为不插入,默认为false

muti:查出多条数据,如果为true则更新所有数据,默认为false只更新一条数据

dt.update({‘name‘:‘Olive‘},{‘$set‘:{‘age‘:100}})

$set:更新指定字段值

用法:{ $set : { field : value } }

$unset:删除指定字段

用法:{ $unset : { field : 1} }

$inc:更新指定字段的值,对指定的字段+value

用法:{ $inc : { field : value }

4.3        
数据删除

5. MongoDB数据查询

5.1 find()

5.1.1  默认无参数或者find({})则查询所有数据。

Find({},{})

第一个{} 放where条件
第二个{} 指定那些列显示和不显示 (0表示不显示 1表示显示)

5.1.2 带有参数的查询

user = dt.find({‘name‘:‘Olive‘})

结果如下图:

5.1.3 查询运算符使用(and 查询):$lt, $lte, $gt, $gte ,$ne

user = dt.find({‘name‘:‘Olive‘,‘age‘:{‘$lt‘:90}})

 

5.1.4 or查询

user =dt.find({‘$or‘:[{‘name‘:‘Olive‘},{‘age‘:{‘$lt‘:50}}]})

 

5.1.5 查询内嵌文档的某个字段(需要使用.号操作符):

先插入一条有内嵌字段的文档

dt.insert_one({‘name‘: ‘111‘,‘address‘:{‘princience‘:‘Beijing‘,‘city‘:‘Beijing‘}})

示例如下:

user = dt.find({‘address.city‘:‘Beijing‘})

5.1.6 in(nin)
查询

user =dt.find({‘name‘:{‘$in‘:[‘Olive‘,‘Tom‘,‘Jack‘]}})

user =dt.find({‘name‘:{‘$nin‘:[‘Olive‘,‘Tom‘,‘Jack‘]}})

 

5.1.7 对查询的结果进行排序:

user = dt.find().sort(‘name‘,pymongo.ASCENDING)//单个字段

user = dt.find().sort([(‘name‘,pymongo.ASCENDING),(‘age‘,pymongo.DESCENDING)])//多个字段

5.1.8 like查询(mongodb支持正则表达式/XXX/   /^XXX/以XXX开头)

user =
dt.find({"name": /"Olive"/})

 

5.2 find_one()

只查找一条信息。

示例:

user =
dt.find_one({‘name‘:‘Olive‘})
print user[‘name‘]

结果如下:

“Olive”

关于一篇mongodb的快速上手的文章,写到这里基本上就结束了,希望能够希望快速上手mongodb的朋友以帮助。这篇文章的示例都是用python+mongodb写的,当然mongodb官方还有对其他语言的适配,这里只是为了方便演示。有兴趣的朋友可以去mongodb的官网去看一下,以便进一步的研究。

时间: 2024-10-04 21:33:48

MongoDB快速上手的相关文章

Mongodb一之快速上手部署

Mongodb之快速上手部署 一.下载mongdb,mongoVUE 我这里下载的是windows zip包 二.解压后 重命名为mongodb 三.在mongodb目录中创建 data,log,repair文件 四:建start.bat,repar.bat Start.bat代码如下: mongod --dbpath=F:\mongodb\data --port 27017   --logpath=F:\mongodb\logs\mongodb.log 备注:--dbpath指定数据存储路径与

快速上手Ionic3 多平台开发企业级问答社区

详情请交流  QQ  709639943 01.快速上手Ionic3 多平台开发企业级问答社区 02.基于大数据技术之电视收视率企业项目实战(hadoop+Spark) 03.Node.js入门到企业Web开发中的应用 04.精通高级RxJava 2响应式编程思想 05.Java秒杀系统方案优化 高性能高并发实战 06.Java深入微服务原理改造房产销售平台 07.快速上手Linux 玩转典型应用 08.全面系统讲解CSS 工作应用+面试一步搞定 09.Java Spring Security开

【技术文章】《快速上手nodejs》

本文地址:http://www.cnblogs.com/aiweixiao/p/8294814.html 原文地址: 扫码关注微信公众号 1.写在前面 nodejs快速上手 nodejs使javascript语言也可以作为服务端语言,有了与php, java,python等后端一较长短的能力.今天我们就简单了解下nodejs,快速上手. node概述 2. nodejs概述  2.1 nodejs概念 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基

快速上手JMeter

详情请交流  QQ  709639943 00.快速上手JMeter 00.Jmeter 00.2017年Java web开发工程师成长之路 00.R语言速成实战 00.R语言数据分析实战 00.Python+Django+Ansible Playbook自动化运维项目实战 00.Java深入微服务原理改造房产销售平台 00.Python3入门机器学习 经典算法与应用 00.老司机学python篇:第一季(基础速过.机器学习入门) 00.Python 从入门到精通 78节.2000多分钟.36小

R语言快速上手入门

R语言快速上手入门 课程学习网址:http://www.xuetuwuyou.com/course/196 课程出自学途无忧网:http://www.xuetuwuyou.com 课程简介 本教程深入浅出地讲解如何使用R语言玩转数据.课程中涵盖R语言编程的方方面面,内容涉及R对象的类型.R的记号体系和环境系统.自定义函数.if else语句.for循环.S3类R的包系统以及调试工具等.本课程还通过示例演示如何进行向量化编程,从而对代码进行提速并尽可能地发挥R的潜能.本课程适合立志成为数据科学家的

Power BI教程_Power BI数据分析快速上手及案例实战

Power BI数据分析快速上手及案例实战 课程学习地址:http://www.xuetuwuyou.com/course/194 课程出自学途无忧网:http://www.xuetuwuyou.com 课程简介 本课程在<Power BI 数据分析快速上手>基础上结合大量的实例,深入讲解PowerBI中看似难懂的各种概念.操作, 并结合行业中的典型案例贯穿了从初级的数据透视表工具.数据透视表选项.数据透视表的刷新.数据透视表中的排序,到中级的动 态数据透视表的创建.数据透视表函数 GETPI

《Python编程快速上手 让繁琐工作自动化》pdf

<div id="article_content" class="article_content tracking-ad" data-mod="popu_307" data-dsm="post"> <p><br></p><p>下载地址:<a target="_blank" href="https://page74.ctfile.co

下载快速上手数据挖掘之solr搜索引擎高级教程(Solr集群、KI分词、项目实战)

Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎. 快速上手数据挖掘之solr搜索引擎高级教程(Solr集群.KI分词.项目实战),刚刚入手,转一注册文件,视频的确不错,可以先下载看看:http://pan.baidu.com/s/1jIdgtWM 密码:s1t3

Masonry介绍与使用实践:快速上手Autolayout

以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时代 window的size固定为(320,480) 我们只需要简单计算一下相对位置就好了 在iphone4-iphone4s时代 苹果推出了retina屏 但是给了码农们非常大的福利:window的size不变 在iphone5-iphone5s时代 window的size变了(320,568) 这时autoresizingMask派上了用场(为啥这时候不用Autolayout? 因为还要支持ios5呗) 简单