连接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
from pymongo import MongoClient
from bson.objectid import ObjectId
mgs = MongoClient('localhost',27017)
db = mgs.python
mgs.close()
查询操作
from pymongo import MongoClient
from bson.objectid import ObjectId
mgs = MongoClient('localhost',27017)
db = mgs.python
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()
mgs.close()