版权声明:个人原创 https://blog.csdn.net/anyedianxia/article/details/81023864
//客户端连接数据库
sudo mongo
// 查看所有的数据库列表
show databases
//选择数据库 如果没有此数据库插入数据可创建 无操作退出则不创建 有的话直接选中
use admin
//查看当前数据库
db
//创建集合 集合名字 如果直接插入数据则会间接创建集合
db.creatCollection('stu_table')
//查看集合
show collections
//查看stu_table中所有内容
db.stu_talbe.find()
//往集合中插入数据
db.info.insert({'name':'xiaoming','age':18})
//变量形式插入数据
data = {
'name':'na',
'age':18
}
db.info.insert(data)
//批量插入数据
data = [
{
'name':'stu1',
'age':18
},
{
'name':'stu2',
'age':20
}
]
db.info.insertMany(data)
'''ObjectID_id是一个12字节的十六进制数,保证每一份文件的唯一性。你可以自己去设置_id插入文档。如果没有提供,那么MongoDB的每个文档提供了一个独特的ID,这12个字节:
前4个字节为当前时间戳;之后的3个字节的机器ID;接下来的2个字节的MongoDB的服务进程id;剩余3个字节是简单的增量值
一个字节等于2位十六进制(一位十六进制的数等于四位二进制的数。一个字节等于8位二进制数) '''
data = {
'_id':12,
'name':'na',
'age':18
}
db.info.insert(data)
//删除集合
db.corse.drop()
true
//限制集合大小 默认不限制 如果capped为true,则需要指定size的大小 单位为字节 超过指定则覆盖前面的
db.createCollection('capped',{capped:true,size:4000000})
// 数据操作部分
//更新数据 此方式相当新insert一条数据 并不能完好更新数据 达不到期望
db.info.update(
{
'name':'stu1'
},
{
'age':20
}
)
db.info.update({ "_id" : 12},{"name" : "nana", "age" : 18 })
//局部更新(完好,可达到期望) $set name属性相当于指定条件
db.info.update(
{
'name':'stu1'
},
{
$set:{
'age':12
}
}
)
//批量更新 默认更新第一条匹配的
db.info.update(
{
name:'stu1' //指定条件
},
{
$set:{
age:22 //要更改的内容
}
},
{
multi:true //通过multi参数指定更新全部匹配的内容
}
)
//删除数据 (一条)
db.info.remove(
{
name:'stu1' //指定条件
},
{
justOne:true //指定删除一条
}
)
//删除数据 (全部匹配的)
db.info.remove(
{
name:'stu1' //指定条件
}
)
//清空数据
db.info.remove({})
//保存数据 如果_id存在就更新数据 如果不存在就insert数据
db.info.save(
{
name:'小小',
age:18
})
db.info.save(
{
'_id':1,
name:'小小',
age:18
})
db.info.save(
{
'_id':2,
name:'小小',
age:18
})
//查询数据
//查询所有
db.info.find()
//查询第一条数据
db.info.findOne()
//查询指定的条件
db.info.find(
{
"_id" : 1,
name:'小小'
}
)
//运算符查询 $lt< gt> $lte<= $gte>= $ne<>
db.info.find(
{
age:{$ne:20} //查询age不等于20的人
}
)
//逻辑运算符查询 $or
db.info.find(
{
$or:[{name:'小小',
'_id':1},
{age:18}]
}
)
//范围运算符 $in $nin in[列表中的数据]
db.info.find(
{
age:{$in:[18,20]}
}
)
//正则查询
db.info.find(
{
name:/^小/
})
or
db.info.find(
{
name:{$regex:'^小'}
}
)
//自定义查询
db.info.find(
{
$where: function(){
return this.name == '小小' && this.age<=18 && this.age>=12
}
}
)
//limit & skip
db.info.find().limit(2)
db.info.find().skip(1)
db.info.find().limit(2).skip(1) //顺序不分先后 结果都一样
db.info.find().skip(1).limit(2) //显示第2-3条
//投影(控制查询结果显示)
db.info.find({name:'小小'},{'_id':0}) //0为不显示 1为默认显示
db.info.find({name:'小小'},{'_id':0,age:0})
//排序sort
db.info.find().sort(
{
age:1, //1为升序 -1为降序
name:1 //当age相同时 按照name排序
})
//统计 可组合使用统计count
db.info.find({age:18}).count() //先根据条件过滤再统计
db.info.count({age:18}) //直接统计
//去重 distinct
db.info.distinct('age',{name:'小小'})
db.info.distinct('name',{age:{$lte:18}})
//聚合
//格式
db.info.aggregate(
[
{管道:{exp}},
{管道:{exp}},
{管道:{exp}},
...
]
)
//$group 分组 _id必填 $max $min $avg $sum
db.info.aggregate([
{$group:
{
_id:'$age', // $必加
count:{$sum:1} //count 随意写 以age为分组 统计数量
}
}
])
db.info.aggregate([
{$group:
{
_id:'age',
min_age:{$min:'$age'} //以age为分组 统计最小年龄
}
}
])
db.info.aggregate([
{$group:
{
_id:'age',
avg_age:{$avg:'$age'} //以age为分组 统计平均年龄
}
}
])
// $push 把具体数据放入列表
// $$ROOT 表示整条数据
db.info.aggregate([
{$group:{
_id:'$gender',
from:{$push:'$$ROOT'}
}
}
]).pretty()
//$match 匹配
db.info.aggregate([
{
$match:{
age:{$lte:18}
}
}
])
db.info.aggregate([
{
$match:{age:{$lte:18}}
},
{
$group:{_id:'$gender',from:{$push:'$$ROOT'}}
}
])
//$project 显示
db.info.aggregate([
{
$match:{age:{$lte:18}}
},
{
$group:{_id:'$gender',from:{$push:'$$ROOT'}}
},
{
$project:{_id:0}
}
]).pretty()
//$sort 排序
db.info.aggregate([
{
$match:{age:{$lte:18}}
},
{
$sort:{age:1}
}
]).pretty()
//$limit $skip 管道有顺序
db.info.aggregate([
{
$match:{age:{$lte:18}}
},
{
$sort:{age:1}
},
{
$skip:1 //skip 优于limit
},
{
$limit:2 //skip 后再 limit
}
]).pretty()
//$unwind 拆分列表数据 None和空列表默认不显示
db.info.aggregate([
{
$unwind:'$class' //拆分class列表 过滤None和空列表
}
])
//
db.info.aggregate([
{
$unwind:{
path:'$class', //拆分class列表
preserveNullAndEmptyArrarys:true //不过滤None和空列表
}
}
])
//Index 索引
//创建索引 可以提高搜索的速度
db.info.ensureIndex({name:1}) //1 开启索引
db.info.find({name:'小小'}).explain('executionStats') //可查看查询用时
//查看索引
db.info.getIndexes()
//删除索引
db.info.dropIndex('name_1')
//备份与恢复 sudo mongodump -h 主机IP 端口 -d 要备份的数据库 -o 目标文件夹
sudo mongodump -h 127.0.0.1:27017 -d info -o /home/zhong/Desktop/mongodbBackup // 备份
sudo mongorestore -h 127.0.0.1:27017 -d info --dir /home/zhong/Desktop/mongodbBackup //恢复
//与python交互
from pymongo import * # 导入库
# 创建客户端对象
client = MongoClient('127.0.0.1',27017)
# 获取数据对象
db = client.info
# 查询数据
cursor = db.info.find()
for row in cursor:
print(row)
# 插入数据
sudo mongo
// 查看所有的数据库列表
show databases
//选择数据库 如果没有此数据库插入数据可创建 无操作退出则不创建 有的话直接选中
use admin
//查看当前数据库
db
//创建集合 集合名字 如果直接插入数据则会间接创建集合
db.creatCollection('stu_table')
//查看集合
show collections
//查看stu_table中所有内容
db.stu_talbe.find()
//往集合中插入数据
db.info.insert({'name':'xiaoming','age':18})
//变量形式插入数据
data = {
'name':'na',
'age':18
}
db.info.insert(data)
//批量插入数据
data = [
{
'name':'stu1',
'age':18
},
{
'name':'stu2',
'age':20
}
]
db.info.insertMany(data)
'''ObjectID_id是一个12字节的十六进制数,保证每一份文件的唯一性。你可以自己去设置_id插入文档。如果没有提供,那么MongoDB的每个文档提供了一个独特的ID,这12个字节:
前4个字节为当前时间戳;之后的3个字节的机器ID;接下来的2个字节的MongoDB的服务进程id;剩余3个字节是简单的增量值
一个字节等于2位十六进制(一位十六进制的数等于四位二进制的数。一个字节等于8位二进制数) '''
data = {
'_id':12,
'name':'na',
'age':18
}
db.info.insert(data)
//删除集合
db.corse.drop()
true
//限制集合大小 默认不限制 如果capped为true,则需要指定size的大小 单位为字节 超过指定则覆盖前面的
db.createCollection('capped',{capped:true,size:4000000})
// 数据操作部分
//更新数据 此方式相当新insert一条数据 并不能完好更新数据 达不到期望
db.info.update(
{
'name':'stu1'
},
{
'age':20
}
)
db.info.update({ "_id" : 12},{"name" : "nana", "age" : 18 })
//局部更新(完好,可达到期望) $set name属性相当于指定条件
db.info.update(
{
'name':'stu1'
},
{
$set:{
'age':12
}
}
)
//批量更新 默认更新第一条匹配的
db.info.update(
{
name:'stu1' //指定条件
},
{
$set:{
age:22 //要更改的内容
}
},
{
multi:true //通过multi参数指定更新全部匹配的内容
}
)
//删除数据 (一条)
db.info.remove(
{
name:'stu1' //指定条件
},
{
justOne:true //指定删除一条
}
)
//删除数据 (全部匹配的)
db.info.remove(
{
name:'stu1' //指定条件
}
)
//清空数据
db.info.remove({})
//保存数据 如果_id存在就更新数据 如果不存在就insert数据
db.info.save(
{
name:'小小',
age:18
})
db.info.save(
{
'_id':1,
name:'小小',
age:18
})
db.info.save(
{
'_id':2,
name:'小小',
age:18
})
//查询数据
//查询所有
db.info.find()
//查询第一条数据
db.info.findOne()
//查询指定的条件
db.info.find(
{
"_id" : 1,
name:'小小'
}
)
//运算符查询 $lt< gt> $lte<= $gte>= $ne<>
db.info.find(
{
age:{$ne:20} //查询age不等于20的人
}
)
//逻辑运算符查询 $or
db.info.find(
{
$or:[{name:'小小',
'_id':1},
{age:18}]
}
)
//范围运算符 $in $nin in[列表中的数据]
db.info.find(
{
age:{$in:[18,20]}
}
)
//正则查询
db.info.find(
{
name:/^小/
})
or
db.info.find(
{
name:{$regex:'^小'}
}
)
//自定义查询
db.info.find(
{
$where: function(){
return this.name == '小小' && this.age<=18 && this.age>=12
}
}
)
//limit & skip
db.info.find().limit(2)
db.info.find().skip(1)
db.info.find().limit(2).skip(1) //顺序不分先后 结果都一样
db.info.find().skip(1).limit(2) //显示第2-3条
//投影(控制查询结果显示)
db.info.find({name:'小小'},{'_id':0}) //0为不显示 1为默认显示
db.info.find({name:'小小'},{'_id':0,age:0})
//排序sort
db.info.find().sort(
{
age:1, //1为升序 -1为降序
name:1 //当age相同时 按照name排序
})
//统计 可组合使用统计count
db.info.find({age:18}).count() //先根据条件过滤再统计
db.info.count({age:18}) //直接统计
//去重 distinct
db.info.distinct('age',{name:'小小'})
db.info.distinct('name',{age:{$lte:18}})
//聚合
//格式
db.info.aggregate(
[
{管道:{exp}},
{管道:{exp}},
{管道:{exp}},
...
]
)
//$group 分组 _id必填 $max $min $avg $sum
db.info.aggregate([
{$group:
{
_id:'$age', // $必加
count:{$sum:1} //count 随意写 以age为分组 统计数量
}
}
])
db.info.aggregate([
{$group:
{
_id:'age',
min_age:{$min:'$age'} //以age为分组 统计最小年龄
}
}
])
db.info.aggregate([
{$group:
{
_id:'age',
avg_age:{$avg:'$age'} //以age为分组 统计平均年龄
}
}
])
// $push 把具体数据放入列表
// $$ROOT 表示整条数据
db.info.aggregate([
{$group:{
_id:'$gender',
from:{$push:'$$ROOT'}
}
}
]).pretty()
//$match 匹配
db.info.aggregate([
{
$match:{
age:{$lte:18}
}
}
])
db.info.aggregate([
{
$match:{age:{$lte:18}}
},
{
$group:{_id:'$gender',from:{$push:'$$ROOT'}}
}
])
//$project 显示
db.info.aggregate([
{
$match:{age:{$lte:18}}
},
{
$group:{_id:'$gender',from:{$push:'$$ROOT'}}
},
{
$project:{_id:0}
}
]).pretty()
//$sort 排序
db.info.aggregate([
{
$match:{age:{$lte:18}}
},
{
$sort:{age:1}
}
]).pretty()
//$limit $skip 管道有顺序
db.info.aggregate([
{
$match:{age:{$lte:18}}
},
{
$sort:{age:1}
},
{
$skip:1 //skip 优于limit
},
{
$limit:2 //skip 后再 limit
}
]).pretty()
//$unwind 拆分列表数据 None和空列表默认不显示
db.info.aggregate([
{
$unwind:'$class' //拆分class列表 过滤None和空列表
}
])
//
db.info.aggregate([
{
$unwind:{
path:'$class', //拆分class列表
preserveNullAndEmptyArrarys:true //不过滤None和空列表
}
}
])
//Index 索引
//创建索引 可以提高搜索的速度
db.info.ensureIndex({name:1}) //1 开启索引
db.info.find({name:'小小'}).explain('executionStats') //可查看查询用时
//查看索引
db.info.getIndexes()
//删除索引
db.info.dropIndex('name_1')
//备份与恢复 sudo mongodump -h 主机IP 端口 -d 要备份的数据库 -o 目标文件夹
sudo mongodump -h 127.0.0.1:27017 -d info -o /home/zhong/Desktop/mongodbBackup // 备份
sudo mongorestore -h 127.0.0.1:27017 -d info --dir /home/zhong/Desktop/mongodbBackup //恢复
//与python交互
from pymongo import * # 导入库
# 创建客户端对象
client = MongoClient('127.0.0.1',27017)
# 获取数据对象
db = client.info
# 查询数据
cursor = db.info.find()
for row in cursor:
print(row)
# 插入数据
db.info.insert({'name':'苏小小'})
关注微信:
邂逅最美的时光 给你别致的风情 。。。