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字段值,表示被删除的字段数量。