`
netcome
  • 浏览: 482738 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Python调用MongoDB使用心得

阅读更多

本文是一个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
分享到:
评论

相关推荐

    电子宠物网站第二章.rar

    技术上,网站可能采用前后端分离的架构,前端使用HTML、CSS和JavaScript进行页面设计和交互,后端使用如Python的Django或Node.js的Express框架处理数据和业务逻辑。数据库管理系统,如MySQL或MongoDB,用于存储用户...

    柚子培训教育 1.2.1 小程序前端+后端.zip

    后端部分可能基于Node.js、Java、Python等服务器端语言构建,使用Express、Django或Flask等框架。后端的主要任务是处理来自前端的HTTP请求,如用户登录验证、数据存储与检索、支付接口调用等。数据库系统,如MySQL、...

    blog chinaunixblog chinaunix

    3. **数据库技术**:数据库是IT领域的重要组成部分,ChinaUnix博客会涉及MySQL、PostgreSQL、Oracle、MongoDB等数据库的使用、设计、优化和故障排查,帮助数据库管理员和开发者解决问题。 4. **网络与系统运维**:...

    轻源码

    2. **编程语言**:根据源码,识别使用的编程语言,如Python(Django或Flask框架)、Java(Spring Boot)、Node.js(Express)等,并学习这些语言的基础和应用。 3. **数据库设计**:查找数据库配置文件,了解如何...

    这是一个网上书店的源代码,做毕业设计的可以看一看

    5. **支付系统**:支付接口的调用、支付状态回调、退款功能,需要掌握支付API的使用。 6. **后台管理系统**:商品上架、库存管理、订单处理、用户管理、数据分析等功能,涉及到后台界面设计和权限控制。 7. **...

    悦跑圈小程序源码加截图.7z

    此外,后端可能采用Node.js、Java或Python等服务器端语言,结合数据库如MySQL或MongoDB进行数据存储与管理。 二、页面结构与布局 1. WXML与WXSS:WXML负责结构化内容的展示,类似HTML,而WXSS则用于定义样式,类似...

    [已测试]拼多多客京东客蘑菇街小程序V10.0.8完整全解密后端源码+小程序前端.zip

    3. **后端源码**:后端源码主要包括服务器端的编程语言(如Java、Python或Node.js)、数据库设计(如MySQL、MongoDB)、框架(如Django、Spring Boot、Express)以及业务逻辑的实现。通过源码,开发者可以了解到如何...

    大学精品课程建设网源代码.rar

    数据库方面,MySQL、PostgreSQL或MongoDB等可能是常用的选择,用于存储课程信息、用户数据等。 在大学精品课程建设网中,可能包括的功能模块有: 1. 课程展示:列出所有精品课程,包括课程简介、教师信息、课程...

    交友盲盒小程序版本源码

    开发此类小程序可能涉及到的技术栈包括前端框架(如微信小程序开发框架WXML和WXSS)、后端服务(如Node.js、Python等)、数据库管理(如MySQL、MongoDB)、API接口设计与调用、以及安全策略(如数据加密、用户隐私...

    宠物用品交易网站.zip

    这些技术通常与数据库系统(如MySQL、PostgreSQL或MongoDB)结合使用,处理用户请求并返回响应。 3. **数据库设计**:宠物用品交易网站需要一个精心设计的数据库来存储商品信息、用户数据、订单详情等。这涉及数据...

    note

    3. **数据库管理**:笔记可能包括SQL查询技巧、数据库设计模式,以及MySQL、PostgreSQL、MongoDB等数据库系统的使用心得。 4. **版本控制**:Git是常见的版本控制系统,笔记中会介绍如何使用Git进行代码提交、分支...

    Cook-Book:简单的MVC应用程序可跟踪和共享我们的食谱

    二是支持社交功能,让用户能够分享自己的食谱到社区,与其他用户交流烹饪心得。 【文件名称列表】 虽然没有具体的文件名,但从"Cook-Book-main"来看,这可能是一个项目的主目录或者源代码库。在实际的MVC应用中,这...

Global site tag (gtag.js) - Google Analytics