安装MongoDB

启动数据库:安装完成指定数据库存放路径 mongod.exe --dbpath c:\data\db

进入目录后运行mongo.exe 成功

创建数据库

>use mydb

switched to db mydb>db

mydb

> book = {"title":"from beginner to master", "author":"qiwsir", "lang":"python"}

{"title" : "from beginner to master","author" : "qiwsir","lang" : "python"}>db.books.insert(book)>db.books.find()

{"_id" : ObjectId("554f0e3cf579bc0767db9edf"), "title" : "from beginner to master", "author" : "qiwsir", "lang" : "Python" }

db 指向了数据库 mydb,books 是这个数据库里面的一个集合(类似 mysql 里面的表),向集合 books 里面插入了一个文档(文档对应 mysql 里面的记录)。“数据库、集合、文档”构成了 mongodb 数据库。

用到数据库,就通过use xxx,如果不存在就建立;用到集合,就通过db.xxx来使用,如果没有就建立。可以总结为“随用随取随建立”。

投影

在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段

如:一个文档有5个字段,需要显示只有3个,投影其中3个字段即可

语法:

参数为字段与值,值为1表示显示,值为0不显示

db.集合名称.find({},{字段名称:1,...})

对于需要显示的字段,设置为1即可,不设置即为不显示

特殊:对于_id列默认是显示的,如果不显示需要明确设置为0

例1

db.stu.find({},{name:1,gender:1})

例2

db.stu.find({},{_id:0,name:1,gender:1})

排序

方法sort(),用于对结果集进行排序

语法

db.集合名称.find().sort({字段:1,...})

参数1为升序排列

参数-1为降序排列

例1:根据性别降序,再根据年龄升序

db.stu.find().sort({gender:-1,age:1})

消除重复

方法distinct()对数据进行去重

语法

db.集合名称.distinct('去重字段',{条件})

例1:查找年龄大于18的性别(去重)

db.stu.distinct('gender',{age:{$gt:18}})

安装 Pymongo

pip install Pymongo

>>> importPymongo>>> client = pymongo.MongoClient("localhost", 27017)

刚才已经建立了一个数据库 mydb,并且在这个库里面有一个集合 books,于是:

>>> db = client.mydb

或者

>>> db = client['mydb']

获得数据库 mydb,并赋值给变量 db(这个变量不是 mongodb 的 shell 中的那个 db,此处的 db 就是 Python 中一个寻常的变量)。

>>>db.collection_names()

[u'system.indexes', u'books']

查看集合,发现了我们已经建立好的那个 books,于是在获取这个集合,并赋值给一个变量 books:

>>> books = db["books"] 或者 >>> books = db.books

增删改查

>>>books.find_one()

{u'lang': u'Python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'}

在 mongodb 的 shell 中是这样子的:

>db.books.findOne()

{"_id" : ObjectId("554f0e3cf579bc0767db9edf"),"title" : "from beginner to master","author" : "qiwsir","lang" : "python"}

新增和查询

>>> b2 = {"title":"physics", "author":"Newton", "lang":"english"}>>>books.insert(b2)

ObjectId('554f28f465db941152e6df8b')

>>>books.find().count()2

>>> for i inbooks.find():

...printi

...

{u'lang': u'Python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'}

{u'lang': u'english', u'title': u'physics', u'_id': ObjectId('554f28f465db941152e6df8b'), u'author': u'Newton'}

批量插入

>>> n1 = {"title":"java", "name":"Bush"}>>> n2 = {"title":"fortran", "name":"John Warner Backus"}>>> n3 = {"title":"lisp", "name":"John McCarthy"}>>> n =[n1, n2, n3]>>>n

[{'name': 'Bush', 'title': 'java'}, {'name': 'John Warner Backus', 'title': 'fortran'}, {'name': 'John McCarthy', 'title': 'lisp'}]>>>books.insert(n)

[ObjectId('554f30be65db941152e6df8d'), ObjectId('554f30be65db941152e6df8e'), ObjectId('554f30be65db941152e6df8f')]

按条件查询

>>> books.find_one({"name":"Bush"})

{u'_id': ObjectId('554f30be65db941152e6df8d'), u'name': u'Bush', u'title': u'java'}

对于查询结果,还可以进行排序:

>>> for i in books.find().sort("title", pymongo.ASCENDING):

...printi

...

{u'_id': ObjectId('554f2b4565db941152e6df8c'), u'name': u'Hertz'}

{u'_id': ObjectId('554f30be65db941152e6df8e'), u'name': u'John Warner Backus', u'title': u'fortran'}

{u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'}

{u'_id': ObjectId('554f30be65db941152e6df8d'), u'name': u'Bush', u'title': u'java'}

{u'_id': ObjectId('554f30be65db941152e6df8f'), u'name': u'John McCarthy', u'title': u'lisp'}

{u'lang': u'english', u'title': u'physics', u'_id': ObjectId('554f28f465db941152e6df8b'), u'author': u'Newton'}

这是按照"title"的值的升序排列的,注意 sort() 中的第二个参数,意思是升序排列。如果按照降序,就需要将参数修改为Pymongo.DESCEDING,也可以指定多个排序键。

更新数据

对于已有数据,进行更新,是数据库中常用的操作。比如,要更新 name 为 Hertz 那个文档:

在更新的时候,用了一个$set修改器,它可以用来指定键值,如果键不存在,就会创建。

>>> books.update({"name":"Hertz"}, {"$set": {"title":"new physics", "author":"Hertz"}})

{u'updatedExisting': True, u'connectionId': 4, u'ok': 1.0, u'err': None, u'n': 1}>>> books.find_one({"author":"Hertz"})

{u'title': u'new physics', u'_id': ObjectId('554f2b4565db941152e6df8c'), u'name': u'Hertz', u'author': u'Hertz'}

关于修改器,不仅仅是这一个,还有别的呢。

删除

删除可以用 remove() 方法:

>>> books.remove({"name":"Bush"})

{u'connectionId': 4, u'ok': 1.0, u'err': None, u'n': 1}>>> books.find_one({"name":"Bush"})>>>

也可以根据 mongodb 的语法规则,写个条件,按照条件删除。

索引

索引的目的是为了让查询速度更快,当然,在具体的项目开发中,要视情况而定是否建立索引。因为建立索引也是有代价的。

>>> books.create_index([("title", pymongo.DESCENDING),])

u'title_-1'

数据导出CSV

在用mongoexport导出csv文件时,发现数据库中的中文在excel中都显示为乱码,用notepad打开则正常。

解决办法: 在notepad中,将编码格式改为UTF-8,保存,再用excel打开,则中文可正常显示。

python操作mongodb语法_python 操作MongoDB相关推荐

  1. python操作mongodb语法_python操作mongodb怎么找到所有的集合

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. python写sql语句_Python操作文件模拟SQL语句功能

    一.需求 当然此表你在文件存储时可以这样表示 1,Alex Li,22,13651054608,IT,2013-04-01 现需要对这个员工信息文件,实现增删改查操作 1. 可进行模糊查询,语法至少支 ...

  3. python docx 字体大小_Python操作Word的入门教程

    Python操作Word的入门教程 前言 今天来介绍下,如何用 Python 来操作 Word. 再来介绍操作 Word 之前,先来说一个最近看书学到的法则,即 3W 法则. 3W:3W分别指 Wha ...

  4. python操作sqlite数据库_Python 操作SQLite数据库的示例

    SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.在很多嵌入式产品中使用了它,它占用资源非常的低,python 中默认继承了操作此款数据库的引擎 sq ...

  5. python语言的语法_PYTHON语言常用语法摘要

    Python 语言常用语法 在 Python 中有 4 种类型的数--整数.长整数.浮点数和复数. 使用变量时只需要给它们赋一个值.不需要声明或定义数据类型. 不要 混合使用制表符和空格来缩进, 因为 ...

  6. python语言的语法_Python语言学习系列------基础语法(一)

    本博客系列为自己按照网上视频教学学习python的一个随笔系列文章,也不知道会更新到多少,反正闲开个坑呗. 一.高级语言的分类 高级的编程语言分为解释型语言和编译型语言,两者的区别是主要是:在执行前是 ...

  7. python数据库模糊查询_Python操作mongodb数据库进行模糊查询操作示例

    本文实例讲述了Python操作mongodb数据库进行模糊查询操作.分享给大家供大家参考,具体如下: # -*- coding: utf-8 -*- import pymongo import re ...

  8. 用python处理excel的基本语法_Python操作Excel学习笔记(28):条件格式

    excelperfect Excel支持3种不同类型的条件格式:内置.标准和自定义.内置条件格式将特定规则与预定义样式相组合.标准条件格式将特定规则与自定义格式相组合.此外,可以定义自定义公式来应用使 ...

  9. python创建数据库表_Python 操作数据库(1)SQL基础

    一.数据库 关系型数据库 常见的关系型数据库:SQL Server.MySql.MariaDB.SQLite.ORACLE.PostgreSQL等 非关系型数据库 常见的非关系型数据看:MongoDB ...

最新文章

  1. Socket程序从windows移植到linux下需要注意的
  2. [转]英语飙升的好方法
  3. 【项目经理之修炼(7)】《基础篇》人生游戏中的神器——谦虚
  4. 在centos上搭建redis集群并附测试(真集群非伪集群)
  5. RFID图书管理系统程序源代码(转)
  6. 使用lua实现nginx rewrite
  7. 20190812:两个数组的交集ⅠⅡ
  8. hdu acm2548
  9. DATEADD日期函数的使用
  10. Lucene的分析过程
  11. 准确生成电信、联通、移动IP地址段
  12. 遇到 oracle 错误 904,EXP-00008: 遇到 Oracle 错误 904
  13. 解决ArcGIS 报错:ERROR 999999: Error executing function.No spatial reference exists.No spatial reference
  14. Your actions speak louder
  15. linux 755是什么意思
  16. 软件方法(下)分析和设计第8章连载[20210816更新]分析 之 分析类图——知识篇
  17. Linux中的split命令,文件切割
  18. 这是关于淘宝的一条重磅消息
  19. 满二叉树和完全二叉树的区别
  20. Java 10正式发布,带来了这些新特性

热门文章

  1. Linux C++多线程同步的四种方式
  2. android 蓝牙传输分包,彻底掌握Android多分包技术(一)
  3. oracle行级的触发器,Oracle触发器Trigger2行级
  4. 以LeNet为例分析CNN中的参数量
  5. MATLAB函数记录
  6. 【云炬mysql数据库笔记】 Work1
  7. 第14课:项目实战——深度优化你的神经网络模型
  8. 台湾大学林轩田机器学习技法课程学习笔记3 -- Kernel Support Vector Machine
  9. 中学计算机科学教育,计算机科学教育周 – Tsinghua International School 清华大学附属中学国际部...
  10. Nhibernate中session的状态与session.connection.state状态的差别的解释