`

mongodb对比学习

阅读更多

      

关于mongo

MongoDB is an open-source document database that provides high performance, high availability, and automatic scaling.

mongo支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能

a-mongo-document

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数据

mongo-use

安装

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集合中输入的所有数据
  • 插入以下数据:
db.unicorns.insert({name: 'Horny', dob: new Date(1992,2,13,7,47), loves: ['carrot','papaya'], weight: 600, gender: 'm', vampires: 63});
db.unicorns.insert({name: 'Aurora', dob: new Date(1991, 0, 24, 13, 0), loves: ['carrot', 'grape'], weight: 450, gender: 'f', vampires: 43});
db.unicorns.insert({name: 'Unicrom', dob: new Date(1973, 1, 9, 22, 10), loves: ['energon', 'redbull'], weight: 984, gender: 'm', vampires: 182});
db.unicorns.insert({name: 'Roooooodles', dob: new Date(1979, 7, 18, 18, 44), loves: ['apple'], weight: 575, gender: 'm', vampires: 99});
db.unicorns.insert({name: 'Solnara', dob: new Date(1985, 6, 4, 2, 1), loves:['apple', 'carrot', 'chocolate'], weight:550, gender:'f', vampires:80});
db.unicorns.insert({name:'Ayna', dob: new Date(1998, 2, 7, 8, 30), loves: ['strawberry', 'lemon'], weight: 733, gender: 'f', vampires: 40});
db.unicorns.insert({name:'Kenny', dob: new Date(1997, 6, 1, 10, 42), loves: ['grape', 'lemon'], weight: 690,  gender: 'm', vampires: 39});
db.unicorns.insert({name: 'Raleigh', dob: new Date(2005, 4, 3, 0, 57), loves: ['apple', 'sugar'], weight: 421, gender: 'm', vampires: 2});
db.unicorns.insert({name: 'Leia', dob: new Date(2001, 9, 8, 14, 53), loves: ['apple', 'watermelon'], weight: 601, gender: 'f', vampires: 33});
db.unicorns.insert({name: 'Pilot', dob: new Date(1997, 2, 1, 5, 3), loves: ['apple', 'watermelon'], weight: 650, gender: 'm', vampires: 54});
db.unicorns.insert({name: 'Nimue', dob: new Date(1999, 11, 20, 16, 15), loves: ['grape', 'carrot'], weight: 540, gender: 'f'});
db.unicorns.insert({name: 'Dunx', dob: new Date(1976, 6, 18, 18, 18), loves: ['grape', 'watermelon'], weight: 704, gender: 'm', vampires: 165});

{field: value}用来查找所有field等于value的文档。通过{field1: value1, field2: value2}的形式可以实现与操作。$lt$lte$gt$gte以及$ne分别表示小于、小于或等于、大于、大于或等于以及不等于。举个例子,查找所有体重超过700磅的雄性独角兽的命令是:

db.unicorns.find({gender: 'm', weight: {$gt: 700}})
//或者 (效果并不完全一样,仅用来为了演示不同的方法)
db.unicorns.find({gender: {$ne: 'f'}, weight: {$gte: 701}})

如果需要或而不是与,可以用$or操作符并作用于需要进行或操作的数组:

db.unicorns.find({gender: 'f', $or: [{loves: 'apple'}, {loves: 'orange'}, {weight: {$lt: 500}}]})

go on ...

pymongo

参考子资料

代码片段:

#首先pip install pymongo
#连接mongodb
import pymongo
conn = pymongo.Connection('localhost', 27017)
#获取数据库列表
conn.database_names()
[u'test1', u'test2', u'admin', u'local']
#连接数据库
db = conn.test1  #或者db = conn['test1']
#权限验证
db.authenticate('username', 'password')
True
#获取聚集列表 (聚集的概念类似于关系型数据库中的表)
db.collection_names()
[u'account', u'role', u'item', u'online']
#连接聚集
account = db.account #或account = db['account']
#查看聚集的一条记录
account.find_one()
#查看聚集的所有key (类似于关系型数据库中的字段)
account.find_one().keys()
#查看聚集的所有记录
for i in account.find():
    rint i
#查看记录总数
account.find().count()
#根据条件查询多条记录
for i in account.find({"name": "xxx"}):
    print i
#对查询结果进行排序 (默认升序ASCENDING)
account.find().sort("name", pymongo.ASCENDING)
account.find().sort([("name", pymongo.ASCENDING), ("active_time", pymongo.DESCENDING)])

#新增记录
account.insert({"name": "mike", "active_time": "20130408"})

#更新记录
account.update({"name": "mike"}, {"$set": {"active_time": "20130408120000"}})
#删除记录 (不带条件表示全部删除)
account.remove({"name": "mike"})

数据备份

参开资料

分享到:
评论

相关推荐

    MongoDB学习笔记

    1. MongoDB的介绍以及同类数据库的对比 - 基本介绍:MongoDB是一种面向文档的数据库,支持高性能、高可用性和易扩展的数据存储。适用于对象及JSON数据的存储。 - NoSQL数据库的种类以及特性:NoSQL数据库主要分为...

    mongodb-测试数据

    在使用这些测试数据时,你应该逐一实践每个操作,对比预期结果,理解MongoDB的工作原理。同时,你也可以利用这些数据进行性能调优,找出最佳实践。记住,实践是掌握任何技术的关键,尤其是像MongoDB这样的数据库管理...

    mongoDB可视化工具

    使用MongoDB可视化工具可以极大地提高工作效率,特别是对于初学者和非开发者,它们降低了学习曲线,使任何人都能更轻松地管理和操作MongoDB数据库。因此,了解并熟练掌握一个合适的MongoDB可视化工具对于MongoDB的...

    MongoDB数据库.pdf

    在学习MongoDB之前,我们需要了解MongoDB与SQL的概念对比。SQL术语与MongoDB术语对比表如下: | SQL术语/概念 | MongoDB术语/概念 | 解释/说明 | | --- | --- | --- | | database | database | 数据库 | | table | ...

    收集的Mongodb资料

    本资料集包含了"Mongodb中文学习手册"和"Mongodb权威指南(第2版)"的英文版,是深入理解并掌握MongoDB的宝贵资源。 《MongoDB中文学习手册》可能涵盖以下知识点: 1. MongoDB基础:介绍MongoDB的基本概念,如文档、...

    mongodb数据库安装包 windows

    使用`mongod --version`命令查看当前版本,对比官网最新版本,如有更新,重复上述下载和安装步骤。 总之,安装Windows版本的MongoDB涉及下载安装包、配置数据目录、创建服务、启动服务以及设置安全性。了解这些步骤...

    MongoDB-2.0.6-安装文件及源码

    MongoDB是一款开源、分布式、高性能的文档型数据库,属于NoSQL数据库的一种。在NoSQL数据库潮流中,MongoDB因其灵活性、可扩展性和易用性,备受...同时,对比最新的MongoDB版本,可以了解到数据库技术的发展和改进。

    mongodb 学习文档

    MongoDB的性能可以通过基准测试进行评估,与传统的RDBMS和其他NoSQL数据库进行对比,分析其在不同工作负载下的表现,例如读写速度、延迟、资源利用率等。 5. 参考资料 为了深入学习MongoDB,推荐查阅官方文档、社区...

    mongodb学习实战

    #### 四、MySQL与MongoDB设计实例对比 这部分内容介绍了在不同的应用场景下,如何选择MySQL或MongoDB,并分析了它们各自的优势与不足。 #### 五、性能测试 - 包括了多个性能测试案例,旨在评估MongoDB在不同场景...

    mongodb学习笔记

    ### MongoDB 学习笔记知识点详解 #### MongoDB 介绍 ##### 简介 MongoDB 是一种基于分布式文件存储的数据库,使用 C++ 编写。它主要为 Web 应用程序提供可扩展、高性能的数据存储解决方案。MongoDB 的数据结构非常...

    MongoDB 性能最佳实践

    MongoDB 是一个流行的开源、分布式文档数据库,以其灵活性、高性能和易用性而备受开发者青睐。在使用 MongoDB 构建高性能应用时...不断学习和优化 MongoDB 的使用方法,将使你在开发高并发、大数据量的应用时游刃有余。

    基于c#的Mongodb帮助类源码 含一个分页效率测试

    MongoDB 是一个流行的开源、高性能、无模式的文档型数据库,常用于构建现代Web应用程序。在C#开发环境中,MongoDB 提供了丰富的驱动程序,使得...通过深入学习和实践,你可以更好地掌握MongoDB在C#应用中的使用技巧。

    mongodb和redis数据库文档

    学习千锋教育的mongodb和redis数据库教程文档资料,你可以深入理解这两种数据库的原理、操作和最佳实践。通过这些文档,你将掌握如何安装配置数据库,如何进行数据操作,如何设计合适的数据库架构,以及如何优化性能...

    mongodb-compass-1.20.5-win32-x64.rar

    同时,它还可以对比两个不同的MongoDB实例,找出数据差异。 9. **索引管理**:创建、查看和管理MongoDB索引是提升查询性能的关键。在Compass中,用户可以直观地看到索引的使用情况,并轻松创建、修改或删除索引。 ...

    文件系统、Mongodb、Hadoop_存取方案分析

    四、MongoDB 与 Hadoop 存取性能对比 MongoDB 在存储和查询速度方面表现出色,尤其在批量操作时,每秒可处理上万条记录。相比之下,Hadoop 更擅长处理大规模数据集的批处理任务,而非实时查询。在选择存取方案时,应...

    MongoDB3.2实战笔记

    为了更好地学习 MongoDB,我们需要掌握官方提供的资源: - **访问地址**:[https://docs.mongodb.org/getting-started/shell/](https://docs.mongodb.org/getting-started/shell/) - **下载地址**:...

Global site tag (gtag.js) - Google Analytics