mongo学习笔记
文章目录
edx生产环境使用了mongo数据库。
对mongo数据库垂涎已久,其高性能/开源/无模式/文档型数据库/…多么诱人的特性,之前也偶尔折腾着玩过,不过都没做笔记,趁此机会重新捡起来。
##关于mongo
MongoDB is an open-source document database that provides high performance, high availability, and automatic scaling.
mongo支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能
##mongo是一种NoSql数据库 NoSql,全称是 Not Only Sql,指的是非关系型的数据库。主要解决几个要点:非关系型的、分布式的、开源的、水平可扩展的。原始的目的是为了大规模web应用。通常特性应用如:模式自由、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等。NoSQL被我们用得最多的当数key-value存储。
###mongo特性
- 模式自由。
- 支持动态查询。
- 支持完全索引,包含内部对象。
- 支持查询。
- 支持复制和故障恢复。
- 文件存储格式为BSON(一种JSON的扩展)。
- 可通过网络访问。
- 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序
- 使用高效的二进制数据存储,包括大型对象(如视频等)。
##软件即服务 将mongo当做一个服务,通过接口CRUD我们的数据。
对于不同用户角色,对mongo所需的了解方面是不同的,我们的角色是Developers,我们主要将它作为服务来使用。
细节可以参考reference
而作为python开发者,我们使用mongo的python驱动来CRUD数据
##安装
ubuntu下安装mongo比较简单,直接sudo apt-get install mongodb
就行。
当然也可以去官网下载安装
端口号是27017
进入mongo shell:mongo
##基础 ###6个简单的概念
-
MongoDB有着与您熟知的‘数据库’一样的概念。每一个数据库都是高层次的容器,用来储存其他的所有数据。
-
一个数据库可以有若干‘集合’(collection)。集合和传统概念中的‘表’有着足够多的共同点。
-
集合由若干‘文档’(document)组成,可以认为这里的文档就是‘行’。
-
文档又由若干‘域’(field)组成,域就像是‘列’。
-
索引
(index)在MongoDB中的意义就如同索引在RDBMS中一样。 -
游标
(cursor)和以上5个概念不同.每当向MongoDB索要数据时,它总是返回一个游标。基于游标我们可以作诸如计数或是直接跳过之类的操作,而不需要真正去读数据。
小结一下,MongoDB由数据库
组成,数据库由集合
组成,集合由文档
组成。域
组成了文档,集合可以被索引
,从而提高了查找和排序的性能。最后,我们从MongoDB读取数据的时候是通过游标
进行的,除非需要,游标不会真正去作读的操作。
关系数据库是在表
这一层次定义列
的,而一个面向文档的数据库则是在文档
这一层次定义域
的。也就是说,集合中的每个文档都可以有独立的域。因此,虽说集合相对于表来说是一个简化了的容器,而文档则包含了比行要多得多的信息。
##mongo shell
###入口
help
。shell会返回全局可用的操作。比如show dbs
Mongo的shell运行在JavaScript之上.
您可以执行一些全局的指令,如help或者exit.
操作对象db来执行针对当前数据库的操作,例如db.help()或是db.stats()。
- 首先我们用全局命令use来切换数据库。输入
use learn
。这个数据库是否存在并没有关系,若不存在则新建.z执行完后您就已经在一个数据库里面了 db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
以上命令对unicorns对象执行insert操作,并传入一个参数。在MongoDB内部,数据是以二进制的串行JSON格式存储的。- 如果我们现在执行db.getCollectionNames(),将看到两个集合:unicorns以及system.indexes。system.indexes在每个数据库中都会创建,它包含了数据库中的索引信息。
- 现在您可以对unicorns对象执行find命令, 列出所有文档:
db.unicorns.find()
请注意,除了您在文档中输入的各个域,还有一个一个叫做_id的域。 - 往unicorns插入一个完全不同的文档。
db.unicorns.insert({name: 'Leto', gender: 'm', home: 'Arrakeen', worm: false})
再次用find可以列出所有的文档
###掌握选择器(selector)
MongoDB还有一个很实用的概念:查询选择器(query selector)。
MongoDB的查询选择器就像SQL代码中的where语句。
因此您可以用它在集合中查找,统计,更新或是删除文档。
选择器就是一个JSON对象,最简单的形式就是{},用来匹配所有的文档。
如果我们需要找到所有雌性的独角兽(unicorn),我们可以用选择器{gender:‘f’}来匹配。
- 用
db.unicorns.remove
删除之前我们在unicorns集合中输入的所有数据 - 插入以下数据:
|
|
{field: value}用来查找所有field等于value的文档。通过{field1: value1, field2: value2}的形式可以实现与操作。$lt
、$lte
、$gt
、$gte
以及$ne
分别表示小于、小于或等于、大于、大于或等于以及不等于
。举个例子,查找所有体重超过700磅的雄性独角兽的命令是:
|
|
如果需要或而不是与,可以用$or操作符并作用于需要进行或操作的数组:
|
|
##pymongo ###参考子资料
代码片段:
|
|
#数据备份
##参开资料
文章作者 种瓜
上次更新 2014-07-19