前言:
做网页开发少不了数据存储中心,在Java Web中常用的数据库是MySQL,它是一种关系型的数据库,但我们在这里不选用MySQL,而使用非关系型的数据库MongoDB。
一、安装和启动MongoDB:
1.安装MongoDB:
下载指定平台的MongoDB安装包,这里我使用的是Mac OS平台,下载地址如下:
https://fastdl.mongodb.org/osx/mongodb-osx-x86_64-3.0.0.tgz
下载指定版本的MongoDB,并解压到本地目录下面,然后在解压后的目录下创建一个data/db目录,并在终端中修改data目录的权限:
sudo chown -R data
例如我是把解压目录放到桌面的文件目录下面,那么我的设置过程如下:
所以我的db目录为:~/Desktop/Python/tools/mongodb-osx-x86_64-3.2.7/data/db
2.启动MongoDB:
启动方法是在终端中输入指令:sudo mongod --dbpath [data目录的地址]
关闭数据库的方法就是在启动的终端界面按键盘:Ctrl+C
3.下载可视化数据库操作工具:
像这样的工具其实很多,我使用的是网上别人推荐的一个 ———— Robomongo,打开软件,首先需要创建一个数据库连接器:
创建过程非常简单,只需要设置连接的名称和ip端口即可,ip要与数据库启动时提示的ip一致,本地测试的话可以直接使用默认值localhost创建:
创建完成后点击连接即可连接到当前启动的MongoDB数据库,并查看其中的内容:
4.启动mongodb常见错误如下:
错误一:
Failed to unlink socket file /tmp/mongodb-27017.sock errno:1 Operation not permitted
解决方法:在终端中输入指令:
rm /tmp/mongodb-27017.sock
错误二:
exception in initAndListen: 29 Data directory /data/db not found., terminating
解决方案:指定当前db存放的目录:
mongod --dbpath ~/Desktop/Python/tools/mongodb-osx-x86_64-3.2.7/data/db
二、使用python操作MongoDB:
1.安装pymongo:
python不能直接操作MongoDB,而是通过pymongo插件来实现对数据库的操作的,所以第一步要做的就是安装pymongo插件,安装过程其实非常简单,直接在终端中输入一下指令:
pip install pymongo
#encoding:utf-8
from pymongo import MongoClient
con = MongoClient('localhost', 27017) #连接到数据库
db = con.local #获取数据库
collect = db.test #获取数据库中的一个Collection
abc={'name':'lzy'} #创建一个key-value格式的数据
collect.insert(abc) #将上面创建的数据存入数据库
con为创建一个连接,db为所连接数据库,也可写为:db=con['local'],collect为所连接的聚集,也可写为:collect=db['test']。
上述代码完成了将一个key为name,value为lzy的的数据插入到local 数据库( 集合)中的test 文档(聚集)中,可以在Robomongo中查看插入后的结果:
那么,数据库的几个基本操作:增、删、改和查在python中通过pymongo的实现代码分别如下:
增:abc={'name':'lzy'} #创建一个key-value格式的数据
或者一次插入多个key-value:abc={'name':'lsh','age':2}
collect.insert(abc)
删:abc={'name':'lzy'}
collect.remove(abc) #删除指定一条数据
collect.remove() #删除此文档的全部数据
改:p = {'name':'lzy'}
a={'name':'ash'}
collect.update( p,{"$set":a}) #将原来数据库的数据p替换为新的数据a
查:
a.查询当前集合(假设以local为例)中所有文档的名称:db.collection_names()
b.查询当前文档的名称:collect.name
c.查询聚集的一条记录:collect.find_one()或者collect.find_one({'name':'lsh'}),假如不存在则返回None
d.查询聚集的字段:collect.find_one({},{'name':1,'age':1})
e.遍历聚集:
for item in collect.find():
item
或者是:
for item in collect.find():
item['name'] #获取此key对应的value
f.查询结果统计:collect.find().count()或者collect.find_one({'name':'lsh'}).count()
g.查询结果排序:
collect.find().sort('age') #默认排序
collect.find().sort('age',pymongo.ASCENDING) #升序
collect.find().sort('age',pymongo.DESCENDING) #降序
此外,查询结果还可以多列排序:
collect.find().sort('age',pymongo.ASCENDING,'age',pymongo.DESCENDING)