创建数据库
use table_1
创建集合
db.createCollection("集合名")
删除数据库 先切换到要删除的数据库
db.dropDatabase()
删除集合(集合就相当于一个表)
db.集合名.drop()
插入
db.集合名.insertone({
name:'xx',
age:18,
score:100
})
db.集合名.insertmany([
{name:'xx',age:18,score:100},
{name:'cc',age:17,score:100}
])
删除
db.集合名.remove(
{'name':'xx'}
)
删除集合内所有的数据
db.集合名.remove({})
更新
db.集合名.update(
{'name':'cc'}, #查询条件
{$set:{'name':'hh'}}, #修改
{multi:true} #修改所有相同查询条件的值
)
查询
find的第一个参数为:查询条件
第二个参数为:返回的字段,返回所有该参数省略即可
#pretty()方法以格式化的方式来显示所有文档
db.集合名.find().pretty() #查询所有数据
db.集合名.find({'name':'cc','age':17}).pretty() #find里传入多个键,相当于and查询
db.集合名.find( #查询name等于cc 或 age 为18的数据
{
$or:[
{'name':'cc'},
{'age':18}
]
}
).pretty()
db.集合名.find( #查询score>90 and (name等于cc 或 age 为18)的数据
{
'score':{$gt:90},
$or:[
{'name':'cc'},
{'age':18}
]
}
).pretty()
条件操作符
(>) 大于 $gt
(<) 小于 $lt
(>=) 大于等于 $gte
(<=) 小于等于 $lte
db.集合名.find({'score':{$gt:90}})
limit:指定读取的记录条数
skip:跳过指定数量的数据
db.集合名.find({},{'name':1}).limit(2) #展示前两天数据
db.集合名.find({},{'name':1}).limit(1),skip(1) #显示第二条数据
sort()排序
1:升序 -1:降序
db.集合名.find().sort({KEY:1})
db.集合名.find({},{'name':1}).sort({'score':-1})
索引 createIndex()
1:按升序创建索引 -1:按降序
db.集合名.createIndex({'name':1})
#可以设置使用多个字段创建索引(复合索引)
db.集合名.createIndex({'name':1,'age':-1})
可选参数
- background:Boolean 后台方式创建索引
- unique:Boolean 建立索引是否唯一
- name:string 索引名称,如果未指定,将通过连接索引的字段名和排序顺序生成一个索引名称。
- expireAfterSeconds:integer 指定一个以秒为单位的数值,完成TTL设定,设定集合的生存时间。
db.集合名.createIndex({'name':1,'age':-1},{background:true})
db.集合名.getIndexes() #查看集合索引
db.集合名.totalIndexSize() #查看集合索引大小
db.集合名.dropIndexes() #删除集合所有索引
db.集合名.dropIndex('索引名称') #删除指定索引
聚合 aggregate()
$sum : db.集合名.aggregate([{$group:{_id:'$name',num:{$sum:'$score'}}}])
$avg $min $max $push $addToSet $first $last
db.集合名.aggregate( #计算每个作者所写的文章数
[{$group:
{username:'$name',num_tutorial:{$sum:1}}
}]
)
类似于:select name,count(*) from mysql group by name;
管道操作符
文档在一个管道处理完毕后将结果传递给下一个管道
$project:修改输入文档的结构
$match:过滤数据,只输出符合条件的文档
$limit $skip
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值
$group:将集合中的文档分组,可用于统计结果
$sort:将输入文档排序后输出