前端学习总结(九)MongoDB——最出色的文档型数据库

本文介绍了MongoDB作为NoSQL数据库的主要特点和优势,包括其灵活的数据存储形式、适合大规模数据处理和高性能需求。MongoDB适用于数据模型简单、需要高灵活性和高性能的场景。文中详细阐述了MongoDB的四大核心操作:简介、常用操作、数据更新和删除,以及索引和排序。此外,还提及了Mongoose作为Node.js中用于操作MongoDB的模型框架,以及推荐的图形化管理工具Robomongo。
摘要由CSDN通过智能技术生成

说到MongoDB,就必须先说清楚NoSQL,以下介绍NoSQL的部分源自百度百科。

一 NoSQL

NoSQL,泛指非关系型数据库。(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

虽然NoSQL流行语火起来才短短一年的时间,但是不可否认,现在已经开始了第二代运动。尽管早期的堆栈代码只能算是一种实验,然而现在的系统已经更加的成熟、稳定。不过现在也面临着一个严酷的事实:技术越来越成熟——以至于原来很好的NoSQL数据存储不得不进行重写,也有少数人认为这就是所谓的2.0版本。这里列出一些比较知名的工具,可以为大数据建立快速、可扩展的存储库。

NoSQL数据库的四大分类

1 键值(Key-Value)存储数据库

这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.

2 列存储数据库

这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.

3 文档型数据库

文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。

4 图形(Graph)数据库

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。 如:Neo4J, InfoGrid, Infinite Graph.

因此,总结NoSQL数据库在以下的这几种情况下比较适用:1、数据模型比较简单;2、需要灵活性更强的IT系统;3、对数据库性能要求较高;4、不需要高度的数据一致性;5、对于给定key,比较容易映射复杂值的环境。

下面给出一张对比图:

这里写图片描述

二 MongoDB简介

MongoDB的优点(为什么使用MongoDB):

“宽松”的数据存储形式非常灵活,MongoDB不限制每个key对应的values的数目。比如一个博客系统,有的文章没有评论,则它的值就是一个空集,有的文章评论很多,也可以无限制地插入。更灵活的是,MongoDB不要求同一个集合(collection,相当于SQL的table)里面的不同document有相同的key,比如除了上述这种文档组织,有的文档所代表的文章可能没有likes这个项目,再比如有的文章可能有更多的项目,比如可能还有dislikes等等。这些不同的文档都可以灵活地存储在同一个集合下,而且查询起来也异常简单,因为都在一个文档里,不用进行各种跨文档查询。而这种MongoDB式的存储也方便了数据的维护,对于一篇博客文章来说,所有的相关数据都在这个document里面,不用去考虑一个数据操作需要involve多少个表格。

当然,除了上述的优点,MongoDB还有不少别的优势,比如:MongoDB的数据是用JSON(Javascript Object Notation)存储的(就是上面的这种key-value的形式),而几乎所有的web应用都是基于Javascript的。因此,存储的数据和应用的数据的格式是高度一致的,不需经过转换。更多的优点可以查看:http://www.tutorialspoint.com/mongodb/mongodb_advantages.htm

mongodb是文档型数据库,集合相当于关系型数据库的表,对象相当于关系型数据库的行。

三 MongoDB常用操作

(这里借鉴了StevenSLXie的MongoDB 极简实践入门一文:https://github.com/StevenSLXie/Tutorials-for-Web-Developers/blob/master/MongoDB%20%E6%9E%81%E7%AE%80%E5%AE%9E%E8%B7%B5%E5%85%A5%E9%97%A8.md,向原作者表示感谢!)

1 在后台启动mongodb服务:

  mongod --dbpath=/data/db --port=27017 --fork --logpath=var/log/mongd.log

日志记录在var/log/mongd.log。

2.退出mongodb服务:

#db.shutdownServer() 或者 kill (forked process id)

3. 命令行工具

本地:

$ mongo

特定ip和端口:

$ mongo ip:port

执行mongo命令后:

4.查看当前有哪些数据库:

> show dbs

show 命令也可以用来跟集合或对象来看它们包含哪些内容。

5.使用某数据库(没有会创建,当在集合中加入数据后才算真正创建成功,对象也是,只有掺入数据后才算创建成功)

> use dbname

6 添加一个集合(collection),如:author (MongoDB里的集合和SQL里面的表格类似):

> db.createCollection('author')

7 删除一个集合(collection),如:author

> db.author.drop()

8.插入数据(无集合时会创建集合)

在use具体数据库后,通过以下命令插入数据:

> db.collectionName.insert({})

比如:

db.movie.insert(
{
title: ‘Forrest Gump’,
directed_by: ‘Robert Zemeckis’,
stars: [‘Tom Hanks’, ‘Robin Wright’, ‘Gary Sinise’],
tags: [‘drama’, ‘romance’],
debut: new Date(1994,7,6,0,0),
likes: 864367,
dislikes: 30127,
comments: [
{
user:’user1’,
message: ‘My first comment’,
dateCreated: new Date(2013,11,10,2,35),
like: 0
},
{
user:’user2’,
message: ‘My first comment too!’,
dateCreated: new Date(2013,11,11,6,20),
like: 0
}
]
}
)

请注意,这里插入数据之前,并不需要先声明movie这个集合里面有哪些项目。直接插入就可以了~这一点和SQL不一样,SQL必须先声明一个table里面有哪些列,而MongoDB不需要。

insert操作有几点需要注意:

  1. 不同key-value需要用逗号隔开,而key:value中间是用冒号;
  2. <
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值