pymongo的基本操作和使用
MongoDB简介
MongoDB是一个开源的文档类型数据库,它具有高性能,高可用,可自动收缩的特性。MongoDB能够避免传统的ORM映射从而有助于开发。
文档
在MongoDB中,一行纪录就是一个文档,它是一个由键值对构成的数据结构,MongoDB文档与JSON对象类似。键的值可以包含其他的文档,数组,文档数组。
{
"_id" : ObjectId("5a55c9857c1ccc05bc71e9b0"),
"aid" : 2,
"view" : "--",
"danmaku" : 3564,
"reply" : 3564,
"favorite" : 2763,
"coin" : 924,
"share" : 1511,
"now_rank" : 0,
"his_rank" : 0,
"no_reprint" : 0,
"copyright" : 2
}
集合
MongoDB在集合中存储文档。集合类似于关系数据库中的表。然而,与表不同的是集合不要求它里面的文档具有相同的结构。
在MongoDB中,存储在集合中的文档必然有一个唯一的_id字段作为主键。
MongoDB安装
MongoDB2.2版本之前不支持Windows XP,本教程使用的版本是最新的3.4的版本。为了方便操作和理解,所以选择在Windows讲解,生产环境请使用Linux版本。
设置MongoDB环境
MongoDB需要一个目录来保存数据,默认的数据目录是\data\db。在我的机器上使用下面的目录作为数据目录。
D:\data
你可以在启动MongoDB的时候为它指定一个数据目录。例如我们用如下命令启动MongoDB:
D:\MongoDB\bin\mongod.exe --dbpath D:\data
连接MongoDB
使用mongo.exe命令连接。打开另一个命令行窗口,输入如下命令:
'D:\MongoDb\bin\mongo.exe'
行些命令后,就能连接上MongoDB服务。由于没有配置任何其他端口,也没有配置权限认证,所以一切都是默认的本地连接,相当简单。连接成功后,可以执行help命令,看看有什么内容。
安装MongoDB服务
在没有安装服务之前,每次使用都需要先手动打开mongodb服务,才能连接。我们可以直接把MongoDB的服务安装到计算机,启动之后就不用每次手动打开服务了。
过执行mongod.exe,使用--install选项来安装服务,使用--config选项来指定之前创建的配置文件。
"D:\MongoDB\bin\mongod.exe" --config "D:\MongoDB\mongod.cfg" --install
安装完成之后通过net start MongoDB,启动服务
net stop MongoDB 关闭服务
创建数据库
语法
use DATABASE_NAME
切换到指定数据库,如果不存在,就创建数据库。
查看所有的数据库
show databases databases可以简写成dbs
删除数据库
语法
db.dropDatabase()
删除集合
db.collection.drop()
总结常用的操作符
1.比较操作符
$eq 匹配等于(=)指定值的文档
> db.test.find({'students':{$eq:55}})
返回students等于55 的文档。
\(gt 匹配大于(>)指定值的文档
\)gte 匹配大于等于指定值的文档
\(lt 匹配小于指定值的文档
\)lte 小于等于
\(ne 不等于
\)in 匹配数组中的任意值
> db.test.find({'students':{$in:[55,54,56]}})
$nin 不匹配数组中的值
2.逻辑操作符
$or 或条件查询
查询students大于等于55或者title等于python_mongodb教学的文档
> db.test.find({$or:[{'students':{$gte:55}},{'title':'python_MongoDB教学'}]})
\(and 与条件查询
\)not 查询和表达式不匹配的文档
$nor 查询与任一表达式都不匹配的文档
> db.test.find({$nor:[{'students':{$gte:57}},{'title':'python_MongoDB教学'}]})
更新操作符
$inc 将文档中的某个field对应的value自增/减某个数字amount
> db.test.update({'class':'爬虫2班'},{$inc:{'students':1}}))
\(mul 将文档中的某个field对应的value做乘法操作,同上。
\)rename 重名名文档中指定的字段名字
$set 更新文档中的某一个字段,而不是全部替换
> db.test.update({'students':116},{$set:{'students':56}})
插入数据
在MongoDB中,可以使用insert()方法和save方法插入一个文档到MongoDB集合中,如果此集合不存在,MongoDB会自动为你创建。
先用命令行连接到MongoDB,再进入tz_mongo数据库。
use tz_mongo
然后插入一个文档到test集合,如果test集合不存在,这个操作会自己创建test集合。
例如:
> db.test.insert({'class':'爬虫1班','students':50})
> db.test.save({'class':'爬虫1班','students':50})
> db.test.find()
{ "_id" : ObjectId("5a586e8522dbc47846dd8e1f"), "class" : "爬虫1班", "students" : 50 }
{ "_id" : ObjectId("5a586eae22dbc47846dd8e20"), "class" : "爬虫1班", "students" : 50 }
在插入的文档中,如果不指定_id参数,那么 MongoDB 会为此文档分配一个唯一的ObjectId。
_id为集合中的每个文档唯一的12个字节的十六进制数。
修改数据
MongoDB 使用 update() 和 save() 方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。
update() 方法。
update方法
update方法用于更新已经存在的文档。
我们先在test里面插入条数据,然后再进行修改。
> db.test.insert({'title':'MongoDB教学'})
WriteResult({ "nInserted" : 1 })
> db.test.update({'title':'MongoDB教学'},{$set:{'title':'tz_MongoDB教学'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
然后再查看数据发现数据已经被修改。
这里set的作用是指更新文档当中的某一个字段,如果不使用set,文档会被直接替换。
update方法默认只更新一个文档.如果需要更新多个文档,需要指定multi参数
save方法
save() 方法通过传入的文档来替换已有文档。
> db.test.save({'_id':ObjectId("5a586e8522dbc47846dd8e1f"),'class':'爬虫1班','students':56})
查询数据
mongo查询数据使用的主要方法就是find。find方法以分结构化的方式来显示所有文档。
find方法可以传入查询条件来进行数据查询。也可以不传。
> db.test.find()
默认返回20条数据
> db.test.findOne()
返回一条数据
> db.test.find().limit(num)
返回num条数据,不超过20条
> db.test.find({'class':'爬虫1班'})
通过给定的字段查询
> db.test.find({'students':{$gte:58}})
查询students大于等于58的数据
> db.test.find({$or:[{'students':58},{'students':55}]})
or操作符
删除数据
使用remove()方法从集合中删除文档。这个方法需要一个条件文档用来决定哪些文档将被删除。
> db.test.remove({'class':'爬虫1班'})
删除指定条件匹配的所有文件。
> db.test.remove({'class':'爬虫1班'},{justOne:true})
删除匹配条件的一条数据
> db.test.remove({})
删除当前文档
> db.test.drop()
删除集合
删除操作也会返回一个WriteResult对象,他包含了操作的状态信息,nremoved字段值,表示被删除的字段数量。
pymongo的基本操作和使用的更多相关文章
- pyMongo 一些基本操作
1. find() 函数, 可以在函数体内直接指定 filter, sort, projection(限制field), 语法如下: datas = col.find( filter = {" ...
- pymongo的基本操作和使用--练习
1.将MongoDB注册到电脑中 安装好MongoDB之后,如何使用MongoDB呢?来到安装目录D:/MongoDB/bin会有如下列表: 其中,mongod.exe是服务端,mongo.exe是客 ...
- MongoDB --- 02. 基本操作,增删改查,数据类型,比较符,高级用法,pymongo
一.基本操作 . mongod 启动服务端 2. mongo 启动客户端 3. show databses 查看本地磁盘的数据库 4. use 库名 切换到要使用的数据库 5. db 查看当前使用的数 ...
- python使用pymongo访问MongoDB的基本操作,以及CSV文件导出
1. 环境. Python:3.6.1 Python IDE:pycharm 系统:win7 2. 简单示例 import pymongo # mongodb服务的地址和端口号mongo_url = ...
- 【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用
[网络爬虫入门05]分布式文件存储数据库MongoDB的基本操作与爬虫应用 广东职业技术学院 欧浩源 1.引言 网络爬虫往往需要将大量的数据存储到数据库中,常用的有MySQL.MongoDB和Red ...
- pymongo的使用
利用python操作mongodb需要导入pymongo库 pip install pymongo 1.连接mongodb import pymongo client = pymo ...
- Python 驱动 MongoDB 示例(PyMongo)
Python 的MongoDB驱动 pymongo ,使用pip Install pymongo安装即可 最近发现网上的很多实例已经过时了,在此自我探究记录下来. 编写一个接口类来支持MongoDB的 ...
- 孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5
孤荷凌寒自学python第六十六天学习mongoDB的基本操作并进行简单封装5并学习权限设置 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十二天. 今天继续学习mongo ...
- 孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4
孤荷凌寒自学python第六十五天学习mongoDB的基本操作并进行简单封装4 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十一天. 今天继续学习mongoDB的简单操作 ...
随机推荐
- Mysql数据库(二)Mysql数据库管理
一 .创建数据库 1.通过CREATE DATABASE db_library;创建名称为db_library的数据库. 2.通过CREATE SCHEMA db_library1;创建名称为db_l ...
- Java基础(十)接口(interface)
1.接口的概念 在Java中,接口不是类,而是对类的一组需求描述,这些类要遵从接口描述. 例如:Array类中的sort方法可以对对象数组进行排序,但要求满足下列前提:对象所属的类必须实现了Compa ...
- Java IO编程——字符流与字节流
在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作.而对于程序而 ...
- 如何在Spring Boot项目中巧妙利用策略模式干掉if else!
直入主题 我们都知道,设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性.稳健性以及安全性 ...
- Python装饰器基础
一.Python装饰器引入 讲 Python 装饰器前,我想先举个例子,虽有点污,但跟装饰器这个话题很贴切. 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个 ...
- tomcat的虚拟路径的配置
在一些项目中有时候需要把一些文件(例如图片.视频)存储在硬盘上的,如果是把文件在放在硬盘上的话,怎么才能访问到这些文件昵. 好了.下面就为大家讲讲如何利用tomcat 虚拟路径访问硬盘上的文件.总共有 ...
- 操作系统实现(一):从Bootloader到ELF内核(转载)
原文链接: http://www.cppblog.com/airtrack/archive/2014/10/30/208729.html Bootloader 我们知道计算机启动是从BIOS开始,再由 ...
- 真正的打包scrapy单文件(不包含cfg)
前置:https://www.cnblogs.com/luocodes/p/11827850.html 解决最后一个问题,如何将scrapy真正的打包成单文件 耗了一晚上时间,今天突然有灵感了 错误分 ...
- [考试反思]1006csp-s模拟测试62:隔断
本来说好的好一场烂一场. 那样的日子结束了,连着烂了两场...幸亏T3傻逼了救我一命不算太惨... T1树上的特殊性质会做但是没有继续想下去就死在错贪心上了还没有过那个点... T2迭代至稳定被我错误 ...
- CSPS模拟 73
被T3坑了 忘记考虑$atan$只会返回正数导致无法区分方向相反模长相等的两个向量 直接把向量拆成ab两个上三角函数干出来就对了 真的exhausted