'''
7.条件查询
db.集合名.find()
db.集合名.findOne(查询条件) 单条查询
db.集合名.find().pretty() 对查询结果美化
比较运算
$lt 小于
$lte 小于等于
$gt 大于
$gte 大于等于
$ne 不等于
db.集合名.find({key:{$lt:n}})
逻辑运算
and:
db.集合名.find($and:[{key1:'value1'},{key2:'value2'}]) 可以直接 db.集合名.find({key1:'value1',key2:'value2'})
or:
db.集合名.find($or:[{key1:'value1'},{key2:'value2'}])
混合
db.colname.find({$or:[{key:value,key1:value1},key2:value2]})
范围运算
in:
db.集合名.find({key:{$in:[n1,n2,n3]}})
not in:
db.集合名.find({key:{$nin:[n1,n2,n3]}})
正则:只能用于字符串
db.集合名.find({key:/正则条件/})
db.集合名.find({key:{$regex:'正则条件'}})
自定义条件 js的函数func
db.集合名.find({$where:function(){return this.age == 18}})
'''
'''
8.find后的附加操作
db.集合名.find().skip(n) 略过的条数
db.集合名.find().limit(n) 限制返回条数
投影操作:限制返回的字段内容,格式 查询所有,name为true返回name,_id默认返回,_id为false,就不返回,所以结果是只展示所有的name
db.集合名.find({},{name:1,_id:0})
db.集合名.find().sort({age:1}) 以age排序 升序:1 降序:-1
db.集合名.find(条件).count() 统计
db.集合名.count(条件)
db.集合名.distinct(域名) 即字段名,以哪个字段来去重
'''
'''
9.聚合运算 管道$
db.集合名.aggregate({$group:{_id:'$gender'}})
分组,以gender来分组,并且作为id
db.集合名.aggregate({$group:{_id:'$gender',counter:{$sum:1}}})
分组,以gender来分组,并且作为id,然后 数量(每个性别的人数,counter可以随便起),$sum求和 : 1 (1的比例来求和,即有1条数据为1个)
其实形成了一张虚拟的表,有两个字段 主键_id和counter
db.集合名.aggregate({$group:{_id:'$gender',counter:{$sum:1},sum_age:{$sum:'$age'},avg_age:{$avg:'$age'}}})
虚拟表:4个字段 以gender分组 主键_id ,每个组的人数counter,年龄总和sum_age,平均年龄avg_age
db.集合名.aggregate({$group:{_id:'$gender',name_list:{$push:'$name'}}})
虚拟表:2个字段 以gender分组,主键_id,name_list字段:把分组后的每个名字push到相对应的位置
db.集合名.aggregate({$match:{age:18}})
管道$match 同find就是查询,但是可以有后续的附加
查询年龄是18的
db.集合名.aggregate({$match:{name:{$regex:'黄'}}},{$project:{name:1}})
管道$project 就是投影操作:限制返回的内容
查找名字含有黄的,然后投影只返回name字段,_id字段是默认返回的
db.集合名.aggregate({$limit:5},{$skip:2})
$limit(限制) 和 $skip(略过) 和find的后续操作含义相同,但是注意先后顺序对结果的影响
db.集合名.aggregate({$sort:{age:1}})
$sort排序 1:升序 -1:降序
db.集合名.aggregate({$unwind:'$size'})
$unwind 拆分列表 拆分size size = ['M','S','L']
'''
'''
10.索引
查看索引
db.集合名.getIndexes()
创建索引
db.集合名.ensureIndex({key:1},{background:true})
以 key 来创建索引 1:升序 background在后台来创建
删除索引 db.集合名.dropIndex({key:1}) 以谁创建的就以谁删除,并且顺序也要带上
以索引来查询
db.集合名.find(查询条件).hint(创建索引的条件{key:1 })
'''
'''
11.备份与恢复 在终端
备份
mongodump -h ip -d 备份数据库名 -o 指定目录
恢复
mongorestore -h ip -d 恢复数据库名 --dir 从哪个文件夹恢复
导入与导出 在终端
导出
mongoexport -h ip -d 导出的数据库 -c 导出的表 -o filename.json (如果使用表格--type csv 指明字段的标题-f name,age,gender )
将指定的集合中的数据导出成文件
导入
mongoimport -d dbname -c colname filename
'''
'''
12.python交互
安装 pip install pymongo
from pymongo import MongoClient
客户端对象: 链接mongod
数据库对象: use 数据库
集合对象: 选择了集合
游标对象: 查找之后获得的对象
客户端对象
client = MongoClient(host=ip,port=port) 注意是host
client.database_names() 获取数据库列表
数据库对象
db = client.数据库名字 或者 client[数据库名字]
db.collection_names() 获取集合列表
db.create_collection(集合名) 创建集合
db.drop_collection(集合名) 删除集合
db.name 查看所属数据库
db.authenticate(user,pwd) 权限认证
集合对象
col = db.集合名 或者 db[集合名]
col.name 查看所属的集合名
插入
col.insert_one(data) 插入单条数据:字典
col.insert_many(data) 插入多条数据:字典列表
col.insert(data) 单,多都可
删除
col.delete_one(条件) 删除一条
col.delet_many(条件) 删除多条
col.remove(query,multi) 根据条件删除,multi决定数量
修改
col.update_one(query,update,upsert) 根据query查询,更新成update,存在就修改不存在就插入
col.update_many(query,update,upsert) 修改多条
游标对象 只有查询之后产生
col.find(条件) 返回游标对象,可遍历
col.find_one(条件) 返回一条数据
'''