db.xs.insert({name:zhangsan}) db:当前数据库 xs:学生集合(没有的话自动创建)
show collections 显示当前数据库的集合名字
show dbs 显示当前数据库名字
db.getName() 显示当前数据库名字
db.getCollectionNames() 显示当前集合名字
db.dropDatabase() 删除数据库命令
db.wtd.drop() 删除当前集合名字
db.createUser({user:"123",pwd:"123",roles:[{role:"read",db:"admin"}]}) 插入用户名
db.system.users.find().pretty() 查询数据库中的user信息
db.dropUser("123") 删除数据库中的用户
function cha(obj){var d=db.getCollection("wtdd");d.insert(obj);} 定义function函数
cha({"123123":"123333333333"}) 执行函数,注意花括号
db.wtdd.find() 查询数据库内容
db.wtdd.drop() 删除当前集合
db.wtdd.remove({123:"123"}) 删除集合内的元素
var shu=[{name:"zs",age:13,sex:"nan"},{name:"ls",age:27,sex:"nv"},{name:"zl",age:10,sex:"nan"},{name:"ww",age:27,sex:"nv"}]
db.wtdd.insert(shu)
db.wtdd.find({"name":"ww"},{_id:0}) find({},{}) 第一个花括号里面是限制条件,第二个是输出限制条件1输出,0不输出
db.wtdd.find({name:"ww"},{_id:0,name:1}) 只显示name,{ "name" : "ww" }
db.wtdd.find({age:{$gte:13}}) 查找age大于等于13的人
db.wtdd.update({name:"ww"},{$set:{name:"wwwwww"}}) 更新操作
db.wtdd.update({name:"wwwwww"},{$set:{size:"wwwwww"}},false,false) update增加列操作,第一个是true找不到就新增一列(false只更新找到的),第二个true更新所有匹配到的信息(false只更新第一个找到的)
db.wtdd.find({sex:{$in:["nv","nan"]}}) 找到字段中包含[*,*,*],寻找*的,$in找到其中一个就行,可以是 db.wtdd.find({sex:{$in:[null]}}) 寻找字段为null的数据
db.wtdd.update({sex:{$in:[null]}},{$set:{sex:"nan"}},false,true) 寻找到sex为null的数据后增添列设置为nan
db.wtdd.find({$and:[{age:{$lt:27}},{age:{$not:{$in:[null]}}}]},{_id:0}) 找到age不为空的并且年龄小于27岁,and数组里面是对象,用{}扩住
db.wtdd.find({age:{$not:{$lt:27}}}) 查找年龄大于27岁的,此时如果age为null也会被扫描进来,应该加判断条件判断age不为null
for(var i=1;i<=10;i++) db.wtdd.insert({_id:i,name:i,age:i}) 批量存入数据
db.wtdd.find({}).limit(4) 只输出前四个数值
db.wtdd.find({}).limit(4).skip(2) 跳过前两个,从第三个开始输出数值
db.wtdd.find({"like.0":"jsp"}) 找到数组中第0个数为jsp的数,下标从零开始
db.wtdd.find({like:{$all:["jsp","java"]}}) 查找数组元素中油查找元素的数据
db.wtdd.update({like:{$size:2}},{$set:{size:2}},false,true) 查找到数组元素大小为2的数据赋值列大小为2
db.wtdd.update({_id:1},{$push:{like:"12"},$inc:{size:1}}) 找到id为1的数据,添加元素兵使size+1,这里的$inc不用加花括号
db.wtdd.update({_id:1},{$inc:{size:1}}) 单纯设置一个数+1
db.wtdd.find({_id:1},{like:{$slice:[-1,123]}}) slice中的参数第一个是起始下标,第二个参数是输出的数目,如果第一个参数是-1,第二个参数必须是>=1,只输出最后一个数
db.wtdd.save({_id:1,name:1,age:123}) insert和save的区别:insert不能重复id键,save可以重复主键id,重复之后只有现在的,原来的数组元素都会删掉,相当于删掉后添一条
db.wtd.remove({}) 一键删除集合中的所有数据,参数为{}花括号
db.wtdd.update({_id:1},{$set:{age:"123123123123"}}) 当原来的数据有这一列的时候会更新掉原来的数据
可以自己设置_id号,insert()里面参数是_id:123
db.wtdd.find({"like.1":"java"}) ------------------db.wtdd.find({like:"java"}) 两个都能查找数组内的元素是否有java
·db.wtdd.update({_id:1},{$unset:{age:"fuck"}}) 先找到,后执行删除$unset操作,后面的fuck参数随便写。
db.wtdd.update({_id:1},{$unset:{name:""}})不谢也行
db.wtdd.update({_id:1},{$set:{like:["c++","java"]}})---------------------db.wtdd.update({_id:1},{$push:{like:"c+"}}) 向数组中添加数据
db.wtdd.update({name:{$lt:7}},{$set:{like:["jsp","java"]}},false,true) 增加数组元素
db.wtdd.update({_id:1},{$push:{likes:"c#"}}) push操作直接生成一个数组,没有的话承建一个,有的话插进去
db.wtdd.update({_id:1},{$addToSet:{like:"c+++"}}) 添加的时候进行判断,有重复的加不进去,push不检查直接插进去
db.wtdd.update({_id:1},{$pop:{like:1}}) 参数为1删除最后一个数,参数为-1时删除第一个数
db.wtdd.update({_id:1},{$pushAll:{like:["java!!","c++--","c#"]}}) 同时插进去好多个数
db.wtdd.update({_id:1},{$pull:{like:"c#"}}) pull删除数组中的指定值,有重复的都会被删掉
db.wtdd.update({_id:1},{$pullAll:{like:["c+","java"]}}) pullAll删除数组中的的许多值,有重复的一并都删掉
> var ite=db.wtdd.find()
> while(ite.hasNext()){var to=ite.next();print(to._id);} 利用迭代器操作查找数据集
https://paste.ubuntu.com/p/dntz6p6BYq/
var persons = [{ name:"jim", age:25, email:"75431457@qq.com", c:89,m:96,e:87, country:"USA", books:["JS","C++","EXTJS","MONGODB"] }, { name:"tom", age:25, email:"214557457@qq.com", c:75,m:66,e:97, country:"USA", books:["PHP","JAVA","EXTJS","C++"] }, { name:"holiday", age:26, email:"344521457@qq.com", c:75,m:63,e:97, country:"USA", books:["JS","JAVA","C#","MONGODB"] }, { name:"zhangsan", age:27, email:"2145567457@qq.com", c:89,m:86,e:67, country:"China", books:["JS","JAVA","EXTJS","MONGODB"] }, { name:"lisi", age:26, email:"274521457@qq.com", c:53,m:96,e:83, country:"China", books:["JS","C#","PHP","MONGODB"] }, { name:"wangwu", age:27, email:"65621457@qq.com", c:45,m:65,e:99, country:"China", books:["JS","JAVA","C++","MONGODB"] }, { name:"zhaoliu", age:27, email:"214521457@qq.com", c:99,m:96,e:97, country:"China", books:["JS","JAVA","EXTJS","PHP"] }, { name:"piaoyingjun", age:26, email:"piaoyingjun@uspcat.com", c:39,m:54,e:53, country:"Korea", books:["JS","C#","EXTJS","MONGODB"] }, { name:"lizhenxian", age:27, email:"lizhenxian@uspcat.com", c:35,m:56,e:47, country:"Korea", books:["JS","JAVA","EXTJS","MONGODB"] }, { name:"lihuiying", age:21, email:"lihuiying@uspcat.com", c:36,m:86,e:32, country:"Korea", books:["JS","JAVA","PHP","MONGODB"] }, { name:"zhangsuying", age:22, email:"zhangsuying@uspcat.com", c:45,m:63,e:77, country:"Korea", books:["JS","JAVA","C#","MONGODB"] }]
查询语文成绩大于85或者英语大于90的学生信息
db.persons.find({$or:[{c:{$gte:85}},{e:{$gte:90}}]},{_id:0,c:1,e:1}) or操作用[]包括
查询出名字中不存在”li”的学生的信息
cha.find({name:{$not:/li/i}},{_id:0,name:1})
查询国籍不是中国或美国的学生信息
db.persons.find({country:{$nin:[“USA”,“China”]}}) $not用于任何取反操作,$nin只适用于集合操作。
$all ----------------->[a,b,c,d]数组中的都得存在
cha.find({books:{$all:["JS","MONGODB"]}},{_id:0,name:1,age:1}).sort({age:1}) sort参数为{},参数为1是从小到大,参数为-1是从大到小
var find=cha.find()
> while(find.hasNext()){var to=find.next();cha.update({name:to.name},{$set:{size:to.books.length}},false,true)} 通过函数实现增加列元素,查找喜欢的书是三个的操作。
cha.find({name:"jim"},{books:{$slice:[1,2]}}) silice实现输出插片输出 books:{$slice:-1} 直接输出最后一个数
找到年龄大于22岁,在K学校上过学的学生并且喜欢C++
cha.find({age:{$gt:22},books:"C++","school.school":"K"},{_id:0}).pretty()
以j开头的数据:/^j/,以ok结尾的数据:/ok$/,含有ij的数据:/ij/,查询部分大小写的数据:/ij/i 后面的i
function haha(){var t=Math.floor(Math.random()*1000);print(t);} 随机生成函数,*100就是1-100的数,floor向负无穷取整,ceil是向正无穷取整。
执行文档操作,返回文档操作之前或者之后的结果,主要是new的赋值,找不到为null
ps = db.runCommand({
"findAndModify":"persons",
"query":{name:"test"},
"update":{"$set":{"age":11}},
"new":true
}).value
--"findAndModify" 集合名
--"query" 查询器
--"update" 修改器
--"new" 状态--如果 true 表示返回结果是更新后的,false 为更新前
--"sort" 排序
查找函数
distinct操作,后面value和values结果不一样,value只处理一个结果,values处理许多结果
col = db.runCommand({distinct:"wtdd",key:"name"}).values
distinct元组内所有的不一样的元素
集合操作分组,condition可以省略,那个是限制结果底线的
db.runCommand({
group:{
ns:集合名字,
Key:分组的键对象,
Initial:初始化累加器,
$reduce:组分解器,
Condition:条件,
Finalize:组完成器
}
})
按照国家分类找出e最大的数,function中的参数一个是now,一个是pre
db.runCommand({
group:{
ns:"wtd",
key:{"country":true},
initial:{e:0},
$reduce:function(now,pr){
if(now.e>pr.e){
pr.e=now.e;
pr.name=now.name;
}
},
// condition:{e:{$gt:80}}
finalize:function(pr){ 将输出值有一定的格式输出
pr.e = pr.name+" -> scores "+pr.e
}
}
})
聚合操作,流水线,先找到然后处理数据,按照status等级A,B,C分类后求出每个等级的总和
必须为_id,
db.w.a([{$match:{status:{$in:['A','B','C']}}},{$group:{"_id":'$status',sum:{$sum:'$amount'}}}])
mapReduce
var map = function(){emit(this.location,this.name);} 第一个参数:依据分类的组,第二个参数:this.name是要现在的字符串有用做链接啥的,计数的话可以是数字1,就是放一个东西到了每一个group里面
var reduce = function(key,values){return values.join(",");} function函数放着对数据的运用,key是上一个map中的分类列,后面是对每个group中存的东西进行计算,就是上一个map中放进来的东西
var options = {out:"age_sum"} 把结果写入到集合中,以便查找
db.my.mapReduce(map,reduce,options) 执行mapReduce操作
db.age_sum.find().pretty() 从查找的集合中显示出结果
var map = function(){emit(this.location,this.name);}
> var reduce = function(key,values){return key+":"+values.join(",");}
>var options = {query:{age:{$lt:25}},out:"haha"} 在options中可以进行元素选择。
> db.my.mapReduce(map,reduce,options)
> db.haha.find()
mapReduce中间的参数可以可以调换名字,名字可以随便调换,函数调用顺序不能变换
-----------------------------------------------分割线--------------------------------------------------------------------