创建
use 集合名称 创建数据库
show dbs 查看数据库
db.集合名称.find() 把集合导入数据库中
插入
db.集合名称.insert(document)
db.collecion.insert({}) _id存在就会报错
db.collecion.insert({_id:"", })插入文档时,如果不指定_id参数,mongodb会为文档分配一个唯一的objectId
db.collecion.save({}) _id存在会更新
更新
1.db.集合名称.update(<query>,<update>,{multi:<boolean>})
2.db.集合名称.update({name:"laowang"},{name:"xiaowang"}) 把name为laowang的数据替换成xiaowang
3.db.集合名词.update({name:"老王"},{$set:{name:"隔壁老王"}}) 把name为 老王 的数据name的值更新为 隔壁老王
4.multi:true 达到更新多条数据的目的 与$一起配合使用
5.db.集合名称.replaceOne({name:""},{$set:{address:""}) 向集合中的name的值为文档,添加一个address属性或其他属性
6.db.集合m名称.update({key:value},{$push:{"hobby.movies":"Interstellar"}});
7.db.集合m名称.update({key:value},{$addToSet:{"hobby.movies":"Interstellar"}});
删除
1.db.集合名称.remove({name:"laowang"},{justOne:true});
默认情况会删除所有满足条件的数据,'{justOne:true}'能达到只删除一条的效果
2.db.集合名称.remove({});
3.db.集合名称.drop();
查询
1.db.集合名称.find() 查询该集合的所有数据
2.db.集合名称.find({key:value}) 查询该集合中对应key的数据
3.db.集合名称.findOne({key:value}) 查询该集合中对应key的一条数据
4.db.集合名称.find({key:value}).pretty() pretty()达到输出美化效果
1.等于:默认是等于判断,没有运算符
2.db.集合名称.find({key:{$lte:value}}) 查询key小于等于value的数据
3.db.集合名称.find({key:{$lt:value}}) 查询key小于value的数据
4.db.集合名称.find({key:{$gt:value}}) 查询key大于value的数据
5.db.集合名称.find({key:{$gte:value}}) 查询key大于等于value的数据
6.db.集合名称.find({key:{$ne:value}}) 查询key不等于value的数据
1.db.集合名称.find({key:{$in:[]}}) 查询key在[]的数据
2.db.集合名称.find({key:value,key:value}}) and查询
3.db.集合名称.find({$or:[{key:value},{key:value}]}) or查询
4.db.集合名称.find({$or:[{key:{$:value}},{key:{$in:[]}}]}) or查询结合范围查询以及条件查询
使用//或$regex编写正则表达式
1.db.集合名称.find({key:/^/})
2.db.集合名称.find({key:{$regex:"$"}})
limit读取指定数量的文档&skip跳过指定数量的文档
1.db.集合名称.find().limit(number)
2.db.集合名称.find().skip(number)
3.db.集合名称.find().limit(number).skip(number)/db.集合名称.find().skip(number).limit(number)
1.db.集合名称.find({$where:function(){return 条件}})
1.db.集合名称.find({_id:0, name:1,gender:1})
2.db.集合名称.find().sort({key:1}) 该集合以key为标准进行升序排序 降序key:-1
3.db.集合名称.find({},{key:value}) 只查询输出key
1.db.集合名称.find().count()
2.db.集合名称.find({条件}).count()
1.db.集合名称.distinct("去重字段",{条件})
1.db.集合名称.aggregate({管道:{表达式}})
2.db.orders.aggregate({$match:{}}
常用管道:
$group 分组 group by null ---> _id:null
1.分组依据要放在_id后面
2.取不同字段的值需要使用$, '$age'
3.取字典嵌套的字典中的值的时候'$_id.country'
4.能够同时按照多个键进行分组'{$group:{_id:{country:"$country",province:"$province"}}}'结果是'{_id:{country:"",province:""}}'
$match 过滤 能够把结果交给下一个管道,而find不行
db.stu.aggregate({$match:{age:{$gt:18}}},{$group:{_id:"$gender",count:{$sum:1}}},{$project:{_id:0,gender:"$_id",count:1}})
$project 修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
db.stu.aggregate({$project:{_id:0,name:1,age:1}})
db.stu.aggregate({$group:{_id:"$gender",counter:{$sum:1}}},{$project:{_id:0,counter:1}})
db.tv.aggregate(
{$group:{_id:{country:"$country",province:"$province",userid:"$userid"}}},
{$group:{_id:{country:"$_id.country",province:"$_id.province"},count:{$sum:1}}},
{$project:{country:"$_id.country",province:"$_id.province",count:1,_id:0}})
$sort 排序
db.stu.aggregate({$sort:{age:1}})
db.stu.aggregate({$group:{_id:'$gender',counter:{$sum:1}}},{$sort:{counter:-1}})
$limit 限制聚合管道返回的文档数
$skip 跳过指定数量的文档,返回剩下的文档
$unwind 讲数组类型字段进行拆分 db.stu.aggregate({$unwind:"$size"})
db.t2.aggregate({$match:{username:"alex"}},{$unwind:"$tags"},{$group:{_id:null,sun:{$sum:1}}}) 输出结果:{"_id":null,"sum":3}
db.tv.aggregate({$unwind:{path:"$size",preserveNullAndEmptyArrays:true}})
for(i=0;i<100000;i++){db.t255.insert({name:'test'+i,age:i})}
db.t255.find().count()
db.t255.find({name:"test100000"}).explain("executionStats")
db.t255.ensureIndex({name:1})
db.t255.find({name:"test100000"}).explain("executionStats")
查看当前集合的所有索引 db.t1.getIndexes()
db.t1.dropIndex("索引名称")
db.users.find({gender:"m"},{user_name:1,_id:0}).hint({gender:1,user_name:1})
db.users.find({gender:"m"},{user_name:1,_id:0}).hint({gender:1,user_name:1})explain()
mongodump -h dbhost -d dbname -o dbdirectory
mongodump -h 172.16.165.135:27017 -d test -o ~/Desktop/testbak
mongodump -h dbhost -d dbname --dir dbdirectory
mongodump -h 172.16.165.135:27017 -d test2 --dir ~/Desktop/testbak/test1
原子操作常用命令
1.$set 用来指定一个键并更新键,键不存在就创建
2.$unset 删除一个键
3.$inc 多文档的某个值为数字型,只能为满足要求的数字的键进行增减的操作
4.$push 一次可以追加一个值到一个数组字段内
5.$pushAll 一次可以追加对个值到一个数组字段内
6.$pull 从数组文档内删除一个等于value的值
7.$addToSet 增加一个值到数组内,只有这个值不再数组内才增加
8.$pop 删除数组的第一个或最后一个元素
9.$rename 修改字段名称
10.$bit 位操作,integer类型
11.偏移操作符
表达式 ‘$列名’
1.$sum:计算总和,$sum:1表示以一倍计数
2.$avg:计算平均值
3.$min:计算最小值
4.$max:计算最大值
5.$push:在结果文档中插入值到一个数组中
6.$first
7.$last
固定集合
db.createCollection("cappedLogCollection",{capped:true,size:10000,max:1000})
db.cappedLogCollection.isCapped()
db.runCommand({"convertToCapped":"posts",size:10000})
db.cappedLogCollection.find().sort({$natural:-1})
可以插入及更新,但更新不能超出collection的大小,否则更新失败,不允许删除,但是可以调用drop()删除集合中的所有行,但是drop后需要显式地重建集合。
查询限制:
1.索引不能被正则表达式及非操作符(比如:$nin,$not等)
2.算术运算符,如$mod等
3.$where 子句