本文是一个Python 使用MongoDB的简单教程,将使用pymongo对MongoDB进行的各种操作进行了简单的汇总,NoSQLFan进行了简单整理,使用Python的同学可以看一看。
下载相应平台的版本,解压即可。为方便使用,将bin路径添加到系统path环境变量里。其中mongod是服务器,mongo是客户shell,然后创建数据文件目录:在c盘下创建data文件夹,里面创建db文件夹。
基本使用:
安装对应语言的Driver,Python 安装 pymongo
$ easy_install pymongo |
使用方法总结,摘自官方教程
创建连接
>>> import pymongo >>> connection=pymongo.Connection(‘localhost’,27017) |
切换数据库
>>> db = connection.test_database |
获取collection
>>> collection = db.test_collection |
db和collection都是延时创建的,在添加Document时才真正创建
文档添加,_id自动创建
>>> import datetime >>> post = {“author”: “Mike”, … “text”: “My first blog post!”, … “tags”: [“mongodb”, “python”, “pymongo”], … “date”: datetime.datetime.utcnow()} >>> posts = db.posts >>> posts.insert(post) ObjectId(‘…’) |
批量插入
>>> new_posts = [{“author”: “Mike”, … “text”: “Another post!”, … “tags”: [“bulk”, “insert”], … “date”: datetime.datetime(2009, 11, 12, 11, 14)}, … {“author”: “Eliot”, … “title”: “MongoDB is fun”, … “text”: “and pretty easy too!”, … “date”: datetime.datetime(2009, 11, 10, 10, 45)}] >>> posts.insert(new_posts) [ObjectId(‘…’), ObjectId(‘…’)] |
获取所有collection(相当于SQL的show tables)
>>> db.collection_names() [u’posts’, u’system.indexes’] |
获取单个文档
>>> posts.find_one() {u’date’: datetime.datetime(…), u’text’: u’My first blog post!’, u’_id’: ObjectId(‘…’), u’author’: u’Mike’, u’tags’: [u’mongodb’, u’python’, u’pymongo’]} |
查询多个文档
>> for post in posts.find(): … post … {u’date’: datetime.datetime(…), u’text’: u’My first blog post!’, u’_id’: ObjectId(‘…’), u’author’: u’Mike’, u’tags’: [u’mongodb’, u’python’, u’pymongo’]} {u’date’: datetime.datetime(2009, 11, 12, 11, 14), u’text’: u’Another post!’, u’_id’: ObjectId(‘…’), u’author’: u’Mike’, u’tags’: [u’bulk’, u’insert’]} {u’date’: datetime.datetime(2009, 11, 10, 10, 45), u’text’: u’and pretty easy too!’, u’_id’: ObjectId(‘…’), u’author’: u’Eliot’, u’title’: u’MongoDB is fun’} |
加条件的查询
>>> posts.find_one({“author”: “Mike”}) |
高级查询
>>> posts.find({“date”: {“$lt”: d}}).sort(“author”) |
统计数量
>>> posts.count() 3 |
加索引
>>> from pymongo import ASCENDING, DESCENDING >>> posts.create_index([(“date”, DESCENDING), (“author”, ASCENDING)]) u’date_-1_author_1′ |
查看查询语句的性能
>>> posts.find({“date”: {“$lt”: d}}).sort(“author”).explain()[“cursor”] u’BtreeCursor date_-1_author_1′ >>> posts.find({“date”: {“$lt”: d}}).sort(“author”).explain()[“nscanned”] 2 |
附自己总结的一点小心得,仅供参考
缺点
- 不是全盘取代传统数据库(NoSQLFan:是否能取代需要看应用场景)
- 不支持复杂事务(NoSQLFan:MongoDB只支持对单个文档的原子操作)
- 文档中的整个树,不易搜索,4MB限制?(NoSQLFan:1.8版本已经修改为16M)
特点(NoSQLFan:作者在这里列举的很多只是一些表层的特点):
- 文档型数据库,表结构可以内嵌
- 没有模式,避免空字段开销(Schema Free)
- 分布式支持
- 查询支持正则
- 动态扩展架构
- 32位的版本最多只能存储2.5GB的数据(NoSQLFan:最大文件尺寸为2G,生产环境推荐64位)
名词对应
- 一个数据项叫做 Document(NoSQLFan:对应MySQL中的单条记录)
- 一个文档嵌入另一个文档(comment 嵌入 post)叫做 Embed
- 储存一系列文档的地方叫做 Collections(NoSQLFan:对应MySQL中的表)
- 表间关联,叫做 Reference
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
MongoDB与Cassandra数据库对比
MongoDB和Cassandra都属于NoSQL数据库系列,它们也恰好都是开源,但是,它们的相似之处仅此而已 […]
-
eHarmony公司利用Redis NoSQL数据库进行热存储
虽然关系型数据库不会消失,但关系型数据库管理系统有时仅在会话管理、推荐引擎和模式匹配等关键Web应用程序中担当 […]
-
SQL Server 2017将Python视为首选分析工具
Python不再被微软数据库排除在外。SQL Server 2017发布的第二个预览版本,支持使用Python编程语言与R语音用于分析。
-
2017年1月数据库流行度排行榜 新年新气象
新年新气象,数据库知识网站DB-engines最近更新了2017年1月份数据库流行度榜单。TechTarget数据库网站将与您分享1月份的榜单排名情况,让我们拭目以待。