Python连接MongoDB

连接MongoDB

#首先环境变量先配置好
找到mongodb的bin目录,然后加入环境变量

在任意盘符下创建 data 文件夹 ,在 data 文件夹下创建 db(储存数据的文件夹) 和 log(储存日志的文件夹)

1.启动MongoDB服务器
打开cmd,输入:

mongod --dbpath=D:\mongodbInstall\data\db  [--logpath=D:\mongodbInstall\data\log]

一直出现了 network 27017 说明服务器启动成功了,但是不能关闭

2.连接MongoDB服务器

重新打开一个cmd,原来的不能关闭

输入:

mongo

一.操作mongodb数据库

(1)创建数据库

#语法:use 数据库名
注意:如果数据库不存在则创建数据库,否则切换到指定的数据库
注意:如果刚刚创建的数据库不在列表内,如果要显示它,我们需要向刚刚创建的数据库中插入一些数据
use userinfo

#注意_id会自己创建
db.userinfo.insert({name:'小明',age:18,city:'上海',sex:'male'})

(2)删除数据库

前提:使用当前数据库(use 数据库名)
切换到要删除的数据库
use userinfo
db.dropDatabase()

(3)查看所有数据库

show dbs

(4)查看当前正在使用的数据库

1.db
2.db.getName()

(5).断开连接

1.exit
2.quit()

(6).查看命令

help

二.集合操作

(1)查看当前数据库下有那些集合

show collections

(2)创建集合

1.语法:db.createCollection("集合名")
#在userinfo数据库中创建class集合
示例:
user userinfo
db.createCollection("class")
show collections
现在有两个集合
userinfo
class

2.语法:db.集合名.insert(文档)
示例:db.userinfo.insert({name:'小明',age:18,city:'上海',sex:'male'})

注意:两者的区别在于前者创建的是一个空的集合,后者创建一个空的集合并添加一个文档

(3)删除当前数据库中的集合

语法:db.集合名.drop()
示例:db.class.drop()

三.文档操作

(1)插入文档

文档的数据结构和JSON基本一样。所有存储在集合中的数据都是BSON格式。
BSON 是一种类似 JSON 的二进制形式的存储格式
1.使用insert()方法插入文档

语法:db.集合名.insert(文档)
插入一个:db.userinfo.insert({name:'小力',age:22,city:'天津',sex:'male'})

语法:db.集合名.insert([文档1, 文档2, ……, 文档n])
 插入多个:db.userinfo.insert([{name:'小芳',age:20,city:'南京',sex:'female'},{name:'小白',age:17,city:'天津',sex:'female'}])
2.使用save()方法插入文档

语法:db.集合名.save(文档)
说明:如果不指定_id字段,save()方法类似于insert()方法。如果指定_id字段,则会更新_id字段的数据
#实例1:
db.userinfo.save({name:'小王',age:22,city:'重庆',sex:'male'})
#实例2
db.userinfo.save([{name:'小张',age:21,city:'北京',sex:'male'},{name:'小丽',age:18,city:'重庆',sex:'female'}])

db.userinfo.save({
    "_id" : ObjectId("5c9c61343ed559c6525a057e"),
    "name" : "赵王城",
    "age" : 27,
    "city" : "太原",
    "sex" : "female"
})

(2)文档更新

update()方法用于更新已存在的文档

语法:
db.集合名.update(
  {query},
  {update},
  {
    {upset:},
    {multi:},
    {writeConcern:}
  }
)
#参数说明:
query:update的查询条件,类似于sql里update语句内where后面的内容

update:update的对象和一些更新的操作符($set,$inc)等,$set直接更新,$inc在原有的基础上累加后更新

upset:可选,如果不存在update的记录,是否当新数据插入,true为插入,False为不插入,默认为false

multi:可选,mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就按照条件查找出来的数据全部更新

writeConcern:可选,抛出异常的级别
#修饰器
$set    用来指定一个键的值,如果这个键不存在,则创建它。
$inc    键不存在时创建一个键,存在的话增加已有键的值
示例:
将小王的年龄改为25岁

#修改匹配到的记录
db.userinfo.update({name:'小王'},{$set:{age:25}})  #不存在创建,存在修改
db.userinfo.update({name:'小王'},{$inc:{age:25}})   #不在创建,在就累加
                   
#修改匹配到的所有记录
db.userinfo.update({name:'小力'},{$set:{age:27}},{multi:true})
#save()方法通过传入的文档替换已有文档
#相当与覆盖,通过_id
语法:
db.集合名.save(
  {document},
  {
  	{writeConcern:}
  }
)

#参数说明:
document:文档数据

writeConcern:可选,抛出异常的级别


db.userinfo.save({_id: ObjectId("5a5f53bd5ef3e646f8ae11ed"),name:'小明',age:22,city:'上海',sex:'male'})

(3)文档删除

#说明:在执行remove()函数前,先执行find()命令来判断执行的条件是否存在是一个良好习惯
#通过_id删除最合理
#语法:
db.集合名.remove(
  {query},
  {
      {justOne:},
      {writeConcern:}
  }
)

#参数说明:
query:可选,删除的文档的条件
justOne:可选,如果为true或1,则只删除一个文档.默认为false,全删除
writeConcern:可选,抛出异常的级别


#示例
db.userinfo.remove({name:("小明")},{justOne:true})

#根据id删除
db.userinfo.remove({'_id':ObjectId('5c9c61343ed559c6525a057e')})

(4)文档查询

find()方法

#查看全部
db.userinfo.find()
#查看指定条件的列
db.userinfo.find({name:'小力'})

findOne()
#查看集合中的第一条
db.userinfo.findOne()
#查看指定条件的第一条
db.userinfo.findOne({name:'小力'})

#pretty()方法以格式化的方式来显示文档
db.userinfo.find().pretty()

(5)查询条件操作符

#大于 - $gt 
语法:db.集合名.find({:{$gt:}})
db.userinfo.find({age:{$gt:20}}).pretty()

#大于等于 - $gte
语法:db.集合名.find({:{$gte:}})
db.userinfo.find({age:{$gte:20}}).pretty()

#小于 - $lt
语法:db.集合名.find({:{$lt:}})
db.userinfo.find({age:{$lt:20}}).pretty()

#小于等于 - $lte
语法:db.集合名.find({:{$lte:}})
db.userinfo.find({age:{$lte:20}}).pretty()

#大于等于 和 小于等于 - $gte 和 $lte
语法:db.集合名.find({:{$gte:,$lte:}})
db.userinfo.find({age:{$gte:17,$lte:20}}).pretty()

#等于
语法:db.集合名.find({:})
db.userinfo.find({age:20}).pretty()

#使用_id进行查询
语法:db.student.find({"_id":ObjectId("id值")})
db.userinfo.find({_id:ObjectId("5a6006027e8d2f7b5443c128")}).pretty()


#查询某个结果集的数据条数
db.userinfo.find().count()

#查询某个字段的值当中是否包含另一个值
db.userinfo.find({name:/小/}).pretty()

#查询某个字段的值是否以另一个值开头
db.userinfo.find({name:/^小/}).pretty()

(6)条件查询and 和 or

[I]and条件

语法:db.集合名.find({条件1,条件2,……,条件n}
db.userinfo.find({name:'小白',sex:'female'}).pretty()

[II]or条件

#语法:
db.集合名.find(
  {
  		{$or:[{条件1},{条件2},……,{条件n}]}
  }
)

db.userinfo.find({$or:[{age:17},{age:{$gte:20}}]}).pretty()

[III]and 和 or条件

#语法:
db.集合名.find(
  {
    {条件1},
    {条件2},
    {$or:[{条件3},{条件4}]}
  }
)
#联合使用返回的是_id
db.userinfo.find({name:'小力'},{$or:[{age:18},{age:{$gte:20}}]})

(7)limit 和 skip

limit():读取指定数量的数据记录
db.userinfo.find().limit(3).pretty()  

skip():跳过指定数量的数据
db.userinfo.find().skip(2).pretty()

skip与limit联合使用
通常用这种方式来实现分页功能
db.userinfo.find().skip(3).limit(3).pretty()

(8)排序

语法:db.集合名.find().sort({:1|-1})
注意:1表示升序,-1表示降序
db.userinfo.find().sort({age:-1}).skip(1).limit(2).pretty()

(9)备份数据库

语法
mongodump命令脚本语法如下:
mongodump -h dbhost -d dbname -o dbdirectory

-h:
MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

-d:
需要备份的数据库实例,例如:userinfo

-o:
备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个userinfo目录,这个目录里面存放该数据库实例的备份数据。


切换到MongoDB的安装bin目录
cd D:\mongodbInstall\bin
mongodump

(10)还原数据库

语法
mongorestore命令脚本语法如下:
mongorestore -h <:port> -d dbname 

--host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为: localhost:27017

:
mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。

你不能同时指定  和 --dir 选项,--dir也可以设置备份目录。

切换到MongoDB的安装bin目录
cd D:\mongodbInstall\bin
mongorestore

python使用mongodb

pip install pymongo
#先引入mongo的库
from pymongo import MongoClient

#用于查询ID
from bson.objectid import ObjectId 

#将连接的实例给变量
mgs = MongoClient('localhost',27017)

#选择一个库
db = mgs.python

#使用完以后关闭链接
mgs.close()
查询操作
from pymongo import MongoClient
from bson.objectid import ObjectId #用于查询ID

#将连接的实例给变量
mgs = MongoClient('localhost',27017)

#选择一个库
db = mgs.python


#查询全部文档
# res = db.userinfo.find()
#
# for i in res:
#     print(i)


#查询部分文档
# res1 = db.userinfo.find({'age':{'$gt':18}})
#
# for i in res1:
#     print('*******************row*************************')
#     for k,v in i.items():
#         print(k,'=>',v)


#查询id

# res2 = db.userinfo.find({'_id':ObjectId('5a6010d9a054510cf073e4c1')})
#
# for i in res2:
#     print(i)



#查询数量
# res3 = db.userinfo.find().count()
# print(res3)

#排序 倒序

# res4 = db.userinfo.find().sort('age',-1)
#
# for i in res4:
#     print(i)


#分页
#12   0-6  6-6

# res_1 = db.userinfo.find().skip(0).limit(6)
# res_2 = db.userinfo.find().skip(6).limit(6)
#
# print(list(res_1))
# print(list(res_2))

mgs.close()
插入操作
from pymongo import MongoClient

#连接服务器
#第一个参数是服务器地址
#第二个参数是端口号
mgs = MongoClient('localhost',27017)

#连接数据库
db = mgs.python

#获取集合
#可要可不要
collection = db.userinfo
#添加
collection.insert([{'name':'老阴比','age':38,'sex':'male','city':'桂林'},{'name':'吴俊','age':83,'sex':'male','city':'六安'}])

#断开连接
mgs.close()
修改操作
from pymongo import MongoClient

mgs = MongoClient()
db = mgs.python

db.userinfo.update({'name':'小芳'},{'$set':{'age':238}})

mgs.close()
删除操作
from pymongo import MongoClient

mgs = MongoClient()

db = mgs.python

# db.userinfo.remove({'name':'小李子'})

db.userinfo.remove()

mgs.close()

你可能感兴趣的:(python)