zoukankan      html  css  js  c++  java
  • mongodb学习(入门。。。。。)

    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中间的参数可以可以调换名字,名字可以随便调换,函数调用顺序不能变换

    -----------------------------------------------分割线--------------------------------------------------------------------

  • 相关阅读:
    494 Target Sum 目标和
    493 Reverse Pairs 翻转对
    492 Construct the Rectangle 构建矩形
    491 Increasing Subsequences 递增子序列
    488 Zuma Game 祖玛游戏
    486 Predict the Winner 预测赢家
    485 Max Consecutive Ones 最大连续1的个数
    483 Smallest Good Base
    Django Form组件
    Django Auth组件
  • 原文地址:https://www.cnblogs.com/0123wtdd/p/10631219.html
Copyright © 2011-2022 走看看