使用Python操作MongoDB
MongoDB简介(摘自:http://www.runoob.com/mongodb/mongodb-intro.html)
MongoDB 由C++语言编写,是一个基于分布式文件存储的开源数据库系统。
MongoDB 将数据存储为一个文档,数据结构由键值对(key=>value)组成,类似于 JSON 对象。
MongoDB 属于NoSQL,NoSQL即Not Only SQL,意思是"不仅仅是SQL",泛指非关系型数据库。
(关系数据库管理系统(RDBMS)与非关系型数据库(NoSQL)之间的区别请见:https://www.cnblogs.com/HuZihu/p/10233242.html)
MongoDB的一些基本术语
| SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
|---|---|---|
| database | database | 数据库 |
| table | collection | 数据库表/集合 |
| row | document | 数据记录行/文档 |
| column | field | 数据字段/域 |
| index | index | 索引 |
| table joins | 表连接,MongoDB不支持 | |
| primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
使用Python操作MongoDB
接下来我们用python来操作MongDB,首先需要安装PyMongo库(pip install pymongo)。
连接MongoDB:
import pymongo
client=pymongo.MongoClient(host='localhost',port=27017)
注:
host为指定的连接服务器的地址,设置为'localhost'代表连接到本地的MongoDB服务上
port为指定的端口,如果不填,默认为27017
查看MongoDB中的所有数据库:
dblist=client.list_database_names()
结果显示现有3个数据库:
['admin', 'config', 'local']
创建或指定数据库:
db=client['HuziHu']
(注:在MongoDB中,数据库只有在内容插入后才会创建)
创建或指定集合:(集合类似于关系型数据库中的表格)
collection=db['Xiaoyugan']
(注:在MongoDB中,集合只有在内容插入后才会创建)
查看指定数据库中的所有集合:
collist=db.list_collection_names()
插入数据:(我们可以自行指定每条数据的id--"_id";如果我们在插入数据时没有指定 _id,那么MongoDB 会为每条数据添加一个唯一的id。)
插入单条数据:insert_one()
yugan={"Name":"Xiaoyugan", "Type":"", "Flavor":"Spicy","Num":,"Comment":"Don\'t like it.Too hot!"}
collection.insert_one(yugan)
注:insert_one()方法返回InsertOneResult对象,该对象包含 inserted_id 属性,它是插入数据的id值。
插入多条数据:insert_many()
yugan=[{"Name":"Xiaoyugan", "Type":"", "Flavor":"Spicy","Num":,"Comment":"Don\'t like it.Too hot!"},
{"Name":"Xiaoyugan", "Type":"", "Flavor":"Sweet","Num":,"Comment":"Don\'t like it.Too sweet!"},
{"Name":"Xiaoyugan", "Type":"", "Flavor":"Fish","Num":,"Comment":"liked it."}]
collection.insert_many(yugan)
注:insert_many()方法返回InsertManyResult对象,该对象包含 inserted_ids 属性,该属性保存着所有插入数据的id值。
查看数据的id值:xx.inserted_id(对于单条数据)
xx.inserted_ids(对于多条数据)
查看指定集合中的所有数据:
for i in collection.find():
print(i)
查询数据:
查询单条数据:find_one(...) ---返回符合查询条件的第一条结果,如果没有符合查询条件的结果,那么返回None
query={"Type":""}
print(collection.find_one(query))
结果:
{'_id': ObjectId('5c330ea47eb8d621f8d0a351'), 'Name': 'Xiaoyugan', 'Type': '', 'Flavor': 'Fish', 'Num': , 'Comment': 'liked it.'}
查询所有数据:find(...) ---返回符合查询条件的所有结果,如果没有符合查询条件的结果,那么返回None
query={"Type":""}
for i in collection.find(query):
print(i)
结果:
{'_id': ObjectId('5c330ea47eb8d621f8d0a351'), 'Name': 'Xiaoyugan', 'Type': '', 'Flavor': 'Fish', 'Num': , 'Comment': 'liked it.'}
{'_id': ObjectId('5c330f6e7eb8d621f8d0a355'), 'Name': 'Xiaoyugan', 'Type': '', 'Flavor': 'Fish', 'Num': , 'Comment': 'liked it.'}
{'_id': ObjectId('5c330f857eb8d621f8d0a359'), 'Name': 'Xiaoyugan', 'Type': '', 'Flavor': 'Fish', 'Num': , 'Comment': 'liked it.'}
查询条件可以使用修饰符:
|
符号 |
含义 |
语法 |
|
$lt |
小于 |
{field: {'$lt': value} } |
|
$gt |
大于 |
{field: {'$gt': value} } |
|
$lte |
小于等于 |
{field: {'$lte': value} } |
|
$gte |
大于等于 |
{field: {'$gte': value} } |
|
$ne |
不等于 |
{field: {'$ne': value} } |
|
$in |
在范围内 |
{field: {'$in': [ <value1>, <value2> ... <valueN> ]} } |
|
$nin |
不在范围内 |
{ field: { '$nin': [ <value1>, <value2> ... <valueN> ]} } |
|
$and |
和 |
{ '$and': [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] } |
|
$or |
或 |
{ '$or': [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } |
|
$not |
不是 |
{ field: { '$not': { <operator-expression> } } } |
此外,查询还可以使用一些功能符号:
|
符号 |
含义 |
示例 |
示例含义 |
|
$regex |
匹配正则表达式 |
{'name': {'$regex': '^M.*'}} |
name以M开头 |
|
$exists |
属性是否存在 |
{'name': {'$exists': True}} |
name属性存在 |
|
$type |
类型判断 |
{'age': {'$type': 'int'}} |
age的类型为int |
|
$mod |
数字模操作 |
{'age': {'$mod': [5, 0]}} |
年龄模5余0 |
|
$text |
文本查询 |
{'$text': {'$search': 'Mike'}} |
text类型的属性中包含Mike字符串 |
|
$expr |
使用聚合表达式 |
{ '$expr': {'$gt':['$fans_count', '$follows_count']} } |
粉丝数大于关注数 |
对查询条件更多的说明请见官方文档:https://docs.mongodb.com/manual/reference/operator/query/。
限制返回查询结果的条数:limit(...)
query={"Comment":{"$regex":"^Don"}}
for i in collection.find(query).limit(2):
print(i)
结果:
{'_id': ObjectId('5c330d667eb8d621f8d0a34d'), 'Name': 'Xiaoyugan', 'Type': '', 'Flavor': 'Spicy', 'Num': , 'Comment': "Don't like it.Too hot!"}
{'_id': ObjectId('5c330ea47eb8d621f8d0a34f'), 'Name': 'Xiaoyugan', 'Type': '', 'Flavor': 'Spicy', 'Num': , 'Comment': "Don't like it.Too hot!"}
统计查询结果的条数:count_documents(...)
query={"Type":""}
print(collection.count_documents(query))
对查询结果进行排序:sort(...)
for i in collection.find().sort('Num', pymongo.ASCENDING):
print(i)
注:pymongo.ASCENDING为升序,pymongo.DESCENDING为降序。
更新数据:
更新单条数据: update_one(..., ...) --- 修改符合查询条件的第一条数据
query={'Flavor': 'Spicy'}
newvalue={"Flavor":"Hot"}
collection.update_one(query,{'$set':newvalue})
更新多条数据: update_many(..., ...) --- 修改符合查询条件的所有数据
query={}
newvalue={'Num':1}
collection.update_many(query,{'$inc': newvalue})
注:返回结果是UpdateResult类型,分别调用matched_count和modified_count属性,可以获得匹配的数据条数和影响的数据条数。
一些常用的更新操作符:
|
符号 |
含义 |
|
$rename |
重新命名字典的键 |
|
$set |
设置字典的值 |
|
$unset |
去除字典的键 |
|
$inc |
增加字典的值 |
|
$setOnInsert |
对已有的数据不更新,只插入原本不存在的数据 |
删除数据:
删除单条数据: delete_one(...) --- 删除符合查询条件的第一条数据
删除多条数据: delete_many(...) --- 删除符合查询条件的所有数据
from bson.objectid import ObjectId
collection.delete_many({'_id':{'$gt':ObjectId('5c330f857eb8d621f8d0a359')}})
删除_id大于ObjectId('5c330f857eb8d621f8d0a359')的数据。
注:
删除数据返回的结果都是DeleteResult类型,可以调用deleted_count属性获取删除数据的条数。
delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中所有的文档。
对集合重新命名: rename()
collection.rename('Yu')
删除集合:
collection.drop()
删除数据库:
client.drop_database('HuziHu')
对集合的更多操作可参见官方文档:http://api.mongodb.com/python/current/api/pymongo/collection.html。
使用Python操作MongoDB的更多相关文章
- Python 操作 mongodb 数据库
原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样 ...
- python操作mongodb
# python操作mongodb # 首先,引入第三方模块pymongo,该模块是python用来操作mongodb的 import pymongo # 第二步,设置ip地址,以及表格名称,表格名字 ...
- python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战
python操作mongodb数据库④mongodb新闻项目实战 参考文档:http://flask-mongoengine.readthedocs.io/en/latest/ 目录: [root@n ...
- python操作三大主流数据库(9)python操作mongodb数据库③mongodb odm模型mongoengine的使用
python操作mongodb数据库③mongodb odm模型mongoengine的使用 文档:http://mongoengine-odm.readthedocs.io/guide/ 安装pip ...
- python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查
python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...
- python操作三大主流数据库(7)python操作mongodb数据库①mongodb的安装和简单使用
python操作mongodb数据库①mongodb的安装和简单使用 参考文档:中文版:http://www.mongoing.com/docs/crud.html英文版:https://docs.m ...
- MongoDB的安装与python操作MongoDB
一.安装MongoDB 因为我个人使用的是windows,就只记录下windows下的安装 1.下载安装 就是官网,下载msi,选个路径安装 2.配置 看见别的地方说需要手动在bin同级目录创建dat ...
- python 操作mongoDB数据库
网上关于python 操作mongoDB的相关文章相对不是很多,并且质量也不是很高!下面给出一个完整的 增删改查示例程序! #!/usr/bin/python # -*- coding: utf-8 ...
- 【转】Python操作MongoDB
Python 操作 MongoDB 请给作者点赞--> 原文链接 这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面 ...
随机推荐
- C# 委托基础1.0
在C# 1.0中提出了一种新特性叫作:委托.委托本质上一种类型.是对特定方法的抽象,定义委托后,可以将方法封装,把方法当参数,传递 using System; using System.Collect ...
- 【Json】fastjson与jackson常用操作记录
本文只是记录fastjson.jackson一些常用的操作方法,没作比较,网上写比较的文章很多啦. 1.对象转Json串 // fastjson String objStr = JSON.toJSON ...
- 高并发系统保护~ing
由于公司业务发展,需要考虑一些高并发系统保护的问题,整理记录一下. 当发现你的系统出现访问卡顿,服务器各种性能指标接近100%(如果一个初创型企业系统正常运行情况下出现这个问题,那么应该恭喜你,你懂得 ...
- jQuery中的动画方法
对角线动画 hide():显示 可以写两个参数——第一个参数 数字类型:毫秒 字符串类型: slow:慢 600ms normal:比slow快 比fast慢 400ms fast:快 ...
- 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(1)-Web前端页面
本 Web 系统框架基于C# EF6+MVC+WebApi的快速应用开发平台.本节主要介绍Web前端页面设计与实现.Web前端页面主要分为普通列表页面.树状导航列表页面.普通编辑页面.数据导入页面.向 ...
- Openlayer 3加载本地ArcGIS切片
第一篇博客,简单的开个头吧.希望自己能坚持记录.一般什么情况什么人需要这样的需求呢,伐木的光头强大哥说我们在深山老林里,没网的啊,地图就手机本地duang的加载一下吧.那么Server啊就要丢掉丢掉. ...
- linux下mysql区分大小写的内容
1.数据库名严格区分大小写2.表名严格区分大小写的3.表的别名严格区分大小写4.变量名严格区分大小写5.列名在所有的情况下均忽略大小写6.列的别名在所有的情况下均忽略大小写
- (办公)springboot配置表单验证@Valid
项目用到了springboot,本来很高兴,但是项目里什么东西都没有,验证,全局异常这些都需要自己区配置.最近springboot用的还是蛮多的,我还是做事情,把经验发表一下. SpringBoot提 ...
- 路由刷rom手册
最近对家里面那5,6个路由器下手了. 路由列表:小米mini 2台. 优酷路由宝l1,tp wdr3320,tp wr840n, 友华wr1200js,小米路由r1n 步骤: 1. 想办法开启ssh ...
- event 和delegate的分别
突然想起delegate委托是支持+= 和-=操作的,然后研究一下究竟这个是怎么做到的,好模仿一下.一开始以为是+=的运算符重载,但是在类库参考中并没有这个运算符重载,只有!= 和==运算符重载.有点 ...