数据存储之非关系型数据库存储----MongoDB存储
MongoDB存储----文档型数据库
利用pymongo连接MongoDB
import pymongo
client = pymongo.MongoClient(host='localhost', port=27017)
# 或 pymongo.MongoClient('mongodb://localhost:23017/')
# 默认端口为:27017# pymongo.MongoClient()方法
指定数据库
# 指定操作test数据库
# db = client.test 或 db = client['test']指定集合
# 指定一个集合要操作的集合students
# collection = db.students 或 collection = db['students']插入数据
import pymongo # 连接MongoDB
client = pymongo.MongoClient(host='localhost', port=27017) # 指定数据库
db = client.test # 指定集合
collection = db.students # 数据
student = {
'id': '',
'name': 'Jordan',
'age': 20,
'gender': 'male'
} # 利用insert_one()方法插入一条数据
result = collection.insert_one(student)
print(result) # 运行输出:<pymongo.results.InsertOneResult object at 0x11089b448>
# 在MongoDB中,每条数据其实都有一个_id属性来唯一标识。如果没有显式指明该属性,MongoDB会自动产生一个ObjectId类型的_id属性。
# 使用 insert_one()和 insert_many()方法来分别插入单条记录和多条记录插入单条数据
import pymongo client = pymongo.MongoClient(host='localhost', port=27017)
db = client.test
collection = db.students student1 = {
'id': '',
'name': 'Lee Hua',
'age': 20,
'gender': 'male'
}
student2 = {
'id': '',
'name': 'Mike',
'age': 21,
'gender': 'male'
} result = collection.insert_many([student1, student2])
print(result)
print(result.inserted_ids)
# 调用inserted_ids属性可以获取数据的_id列表 # 运行输出:
<pymongo.results.InsertManyResult object at 0x110826d88>
[ObjectId('5d28b293e834575faf929428'), ObjectId('5d28b293e834575faf929429')]插入多条数据
# insert_one()方法 和 insert_many()方法
查询
import pymongo client = pymongo.MongoClient(host='localhost', port=27017)
db = client.test
collection = db.students result = collection.find_one({'name': 'Lee Hua'})
print(result) # 输出:
{'_id': ObjectId('5d28b293e834575faf929428'), 'id': '', 'name': 'Lee Hua', 'age': 20, 'gender': 'male'}查询单条数据
import pymongo client = pymongo.MongoClient(host='localhost', port=27017)
db = client.test
collection = db.students result = collection.find()
print(result)
for r in result:
print(r) # find()方法返回一个迭代器,用for循环逐条输出
# 输出结果:
<pymongo.cursor.Cursor object at 0x10e0f7320>
{'_id': ObjectId('5d28ae0360105a198d9d501a'), 'id': '', 'name': 'Jordan', 'age': 20, 'gender': 'male'}
{'_id': ObjectId('5d28ae2d8b3d004feb604874'), 'id': '', 'name': 'Jordan', 'age': 20, 'gender': 'male'}
{'_id': ObjectId('5d28b293e834575faf929428'), 'id': '', 'name': 'Lee Hua', 'age': 20, 'gender': 'male'}
{'_id': ObjectId('5d28b293e834575faf929429'), 'id': '', 'name': 'Mike', 'age': 21, 'gender': 'male'}查询多条数据
# find_one()方法 和 find()方法
可以在这两个方法里面添加条件,如:
find(
{
'name': {'$regex': '^M.*'}
}
)
这里查找的是以'M'开头的名字的那些数据,$regex指定的是正则表达式,
^M.*是一条正则表达式
更多功能符号(如$regex)、数值比较符号的查看MongoDB官方文档:https://docs.mongodb.com/?searchProperty=manual
计数
import pymongo client = pymongo.MongoClient(host='localhost', port=27017)
db = client.test
collection = db.students count = collection.count_documents(
{
'id': {'$regex': '^(2018)'}
}
)
print(count) # 输出id为2018开头的数据的条数# collection.count_documents({条件}) 方法
排序
import pymongo client = pymongo.MongoClient(host='localhost', port=27017)
db = client.test
collection = db.students result = collection.find().sort('id', pymongo.ASCENDING)
for r in result:
print(r) # 以id升序输出所有的数据:
{'_id': ObjectId('5d28ae0360105a198d9d501a'), 'id': '', 'name': 'Jordan', 'age': 20, 'gender': 'male'}
{'_id': ObjectId('5d28ae2d8b3d004feb604874'), 'id': '', 'name': 'Jordan', 'age': 20, 'gender': 'male'}
{'_id': ObjectId('5d28b293e834575faf929428'), 'id': '', 'name': 'Lee Hua', 'age': 20, 'gender': 'male'}
{'_id': ObjectId('5d28b293e834575faf929429'), 'id': '', 'name': 'Mike', 'age': 21, 'gender': 'male'} # sort()方法进行排序
# pymongo.ASCENDING指定升序
# pymongo.DESCENDING指定降序# sort()方法
偏移
import pymongo client = pymongo.MongoClient(host='localhost', port=27017)
db = client.test
collection = db.students results = collection.find().sort('id', pymongo.DESCENDING).skip(1)
print(
[
result['id'] for result in results
]
) # 输出:
['', '', ''] # skip(1)表示偏移1,即忽略前面一个元素skip()方法
import pymongo client = pymongo.MongoClient(host='localhost', port=27017)
db = client.test
collection = db.students results = collection.find().sort('id', pymongo.DESCENDING).skip(1).limit(2)
print(
[
result['id'] for result in results
]
) # 输出:
['', ''] # limit(2) 即表示限制输出的数据条数为两条limit()方法
# 数据量很大时,不使用大的偏移量来查询数据
更新
import pymongo client = pymongo.MongoClient(host='localhost', port=27017)
db = client['test']
collection = db['students'] # 查询条件:age >= 20
query_condition = {
'age': {'$gte': 20}
} # 更新条件:数据的age加1
update_condition = {
'$inc': {'age': 1}
} result = collection.update_one(query_condition, update_condition)
print(result)
print(result.matched_count, result.modified_count) # 输出:
<pymongo.results.UpdateResult object at 0x110a11c88>
1 1 # 返回的结果是UpdateResul类型的
# 调用matched_count属性,获得匹配数据的条数
# 调用modified_count属性,获得影响数据的条数
# $gte : 大于等于
# $inc : 将字段递增指定的值
# updata_one()更新与筛选器匹配的单个文档update_one()方法
import pymongo client = pymongo.MongoClient(host='localhost', port=27017)
db = client['test']
collection = db['students'] query_condition = {
'age': {'$gte': 20}
}
update_condition = {
'$inc': {'age': 1}
} result = collection.update_many(query_condition, update_condition)
print(result)
print(result.matched_count, result.modified_count) # 输出:
<pymongo.results.UpdateResult object at 0x111c84448>
4 4update_many()方法
# update_one()方法 和 update_many()方法
删除
import pymongo client = pymongo.MongoClient(host='localhost', port=27017)
db = client['test']
collection = db['students'] result = collection.delete_one({'age': 21})
print(result.deleted_count) # delete_one()方法:删除第一条符合条件的数据
# delete_count属性:获取删除数据的条数delete_one()方法
import pymongo client = pymongo.MongoClient(host='localhost', port=27017)
db = client['test']
collection = db['students'] result = collection.delete_many({'age': 21})
print(result.deleted_count) # delete_many()方法:删除所有符合条件的数据delete_many()方法
PyMongo的详细用法:http://api.mongodb.com/python/current/api/pymongo/collection.html
数据存储之非关系型数据库存储----MongoDB存储的更多相关文章
- NoSql非关系型数据库之MongoDB应用(三):MongoDB在项目中的初步应用
业精于勤,荒于嬉:行成于思,毁于随. 我们可以结合相关的IDE做一个简单的增删改查了,实现MongoDB在项目中的初步应用. 前提是安装了MongoDB服务和MongoDB可视化工具,没有安装的可以点 ...
- NoSql非关系型数据库之MongoDB应用(二):安装MongoDB可视化工具
业精于勤,荒于嬉:行成于思,毁于随. 我们上次说到NoSql非关系型数据库之MongoDB应用(一):安装MongoDB服务 这次我们介绍安装 NoSQL Manager for MongoDB 可 ...
- 大数据时代的数据存储,非关系型数据库MongoDB
在过去的很长一段时间中,关系型数据库(Relational Database Management System)一直是最主流的数据库解决方案,他运用真实世界中事物与关系来解释数据库中抽象的数据架构. ...
- 大数据时代的数据存储,非关系型数据库MongoDB(一)
原文地址:http://www.cnblogs.com/mokafamily/p/4076954.html 爆炸式发展的NoSQL技术 在过去的很长一段时间中,关系型数据库(Relational Da ...
- Python3爬虫(十) 数据存储之非关系型数据库MongoDB
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.非关系型数据库NoSQL全程是Not Only SQL,非关系型数据库.NoSQL是基于键值对的,不需要经过S ...
- NoSql非关系型数据库之MongoDB应用(一):安装MongoDB服务
业精于勤,荒于嬉:行成于思,毁于随. 一.MongoDB服务下载安装(windows环境安装) 1.进入官网:https://www.mongodb.com/,点击右上角的 Try Free , 2 ...
- Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)
day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库: 简称:DataBase ---->DB 数据库即存放数据的仓库, ...
- 非关系型数据库(NOSQL)和关系型数据库(SQL)区别详解
前言: 在我们的日常开发中,关系型数据库和非关系型数据库的使用已经是一个成熟的软件产品开发过程中必不可却的存储数据的工具了.那么用了这么久的关系数据库和非关系型数据库你们都知道他们之间的区别了吗?下面 ...
- 【Redis】(1)-- 关系型数据库与非关系型数据库
关系型数据库与非关系型数据库 2019-07-02 16:34:48 by冲冲 1. 关系型数据库 1.1 概念 关系型数据库,是指采用了关系模型来组织数据的数据库.关系模型指的就是二维表格模型, ...
随机推荐
- MongoDB4.0支持事务管理
背景 最后我们看一下MongoDB的事务管理,本来是没这一篇的,因为网上大部分资料太老,都为MongoDB之前的版本,的确在MongoDB 4.0版本之前是没有事务管理,但是今天年初MongoDB ...
- .net core 3.0 Signalr - 08 业务实现-客户端demo
由于signalr作为一个单独的推送系统,跟业务系统是分离开的,所以此处模拟一个业务系统,新建一个.net core app项目 ## 模拟实现一个登录功能 我们的登录很简单,当进入系统,如果检测到用 ...
- ORM增删改查
目录 orm django 连接mysql顺序 1 settings配置文件中 2 项目文件夹下的init文件中写上下面内容, 补充 3 models文件中创建一个类(类名就是表名) 4.执行数据库同 ...
- 1. SOFAJRaft源码分析— SOFAJRaft启动时做了什么?
我们这次依然用上次的例子CounterServer来进行讲解: 我这里就不贴整个代码了 public static void main(final String[] args) throws IOEx ...
- 设计模式---结构型模式之适配器模式(Adapter Pattern)
适配器模式定义 将一个类的接口,转换成客户期望的另外一个接口.适配器让原本接口不兼容的类可以合作无间. 适配器模式主要有两种类型:对象适配器和类适配器. 在详细解释这两种类型时,解释部分重要角色.生活 ...
- Java中NIO及基础实现
NIO:同步非阻塞IO 来源:BIO是同步阻塞IO操作,当线程在处理任务时,另一方会阻塞着等待该线程的执行完毕,为了提高效率,,JDK1.4后,引入NIO来提升数据的通讯性能 NIO中采用Reacto ...
- linux 基本操作积累
1 sed 命令,替换含有指定字符的一整行数据 sed -i 's/原字符串/替换后的字符串/g' ./文件名 (此命令会全局替换[整个文件内替换]原字符串) sed -i.bak 's/原字符串/替 ...
- Go语言及Beego框架环境搭建
在开始环境搭建之前,我们先一起来看看: Go有什么优势: 不用虚拟机,它可直接编译成机器码,除了glibc外没有其他外部依赖,部署十分方便,就是扔一个文件就完成了. 天生支持并发,可以充分的利用多核, ...
- 自学web前端达到什么水平,才能满足求职的标准?
大多数野生程序员最棘手的问题就是如何依靠技术解决温饱,通俗来讲就是技术折现的问题. 如果是单纯出于兴趣,或者只是为了突击某一阶段或者某一项目技术壁垒,不跟就业挂钩的自学倒也是无关痛痒.但是当上岗成为自 ...
- PHP range
1.函数的作用:生成范围内的数据 2.函数的参数: @param mixed $start @param mixed $end @param mixed $step 3.例子: <?php $n ...