mongodb 学习

1、insert 新增
    db.student.insert({"name":"pp"})
2、update
        a)整个更新
            db.student.update({filter},{replace dict})
        b)$inc自增修改器,如果键不存在,则增加一个属性
            db.student.update({filter},{"$inc":{"score":1}}) score属性自增1
        c)$set修改器,没有就添加,有就修改
            db.student.update({filter},{"$set":{"age":"27}})
        d)$unset修改器,用来删除某一个属性
            db.student.update({filter},{"$unset":{"age":1})
        e)$push修改器,修改数组类型,如果没有自动创建一个数组,
          否则往数组中添加该值,如果键值对将生成多个数组
            db.student.update({"name":"pp"},{"$push":{"score":60,"age":27}})
            db.student.find()
            >>>>{"name":"pp","score":[60],"age":[27]}
            db.student.update({"name":"pp"},{"$push":{"score":61,"age":28}})
            >>>>{"name":"pp","score":[60,61],"age":[27,28]}
        f)$addToSet修改器,修改数组类型,如果某键对应的数组没有该值就添加,
            有就不做处理,可以避免添加重复的值
        g)$addToSet和$each为数组添加多个元素
            db.student.update({"name":"pp"},{"$addToSet":{
                "score":{"$each":[89,90,91]}
            }})
            db.student.find({"name":"pp"})
            >>>>{"name":"pp","score":[60,61,89,90,91],"age":[27,28]}
        h)$pop 对数组操作,从数组中删除一个元素 {$pop:{key:array index}}
            删除首个元素
            db.student.update({"name":"pp"},{$pop:{score:-1}})
            删除最后一个元素
            db.student.update({},{$pop:{score:1}})
        i)$pull 对数组操作,删除数组中值匹配的元素,如果有重复的元素,
            键一起删除如[1,2,3,1,1]删除1的话,将只剩下[2,3]
            db.student.update({"name":"pp"},{$push:{score:61}})
            db.student.update({"name":"pp"},{$push:{score:61}})
            db.student.update({"name":"pp"},{$push:{score:61}})
            db.student.update({"name":"pp"},{$push:{score:61}})
            db.student.update({"name":"pp"},{$pull:{score:61}})
        j)数组定位修改
             {
                name:"pp",
                age:27,
                score:60,
                address:{
                    country:"china",
                    province:"jiangxi",
                    city:"pingxiang",
                },
                comments:[
                    {
                     author:"joe",
                     comment:"comment three",
                     vote:1
                    },
                    {
                     author:"joe",
                     comment:"comment three",
                     vote:1
                    },

                    {
                     author:"joe",
                     comment:"comment three",
                     vote:1
                    },
                ]
            }
            
            db.student.update({"comments.author":"joe"},{comments.$.vote:3}) 只更新第一条,更新条件的书写方式必须是comments.author
            db.student.update({name:"pp"},{comments.0.author:"joe"}) 更新第一条
            db.student.update({name:"pp"},{comments.1.author:"joe"}) 更新第二条
            db.student.update({name:"pp"},{comments.2.author:"joe"}) 更新第三条
            
        k)如果没有查找到更新,就插入当前这条记录,update的第三个参数
            update({filter},{updict},isUpsert)  isUpsert = true
            db.student.update({"name":"jxm"},{$set:{"age":25}},true)
            db.student.find({"name":"jxm"})
            >>>{"name":"jxm","age":25}
        h)save 保存,如果_id存在则更新,否则增加一条记录
            var x = db.foo.findOne()
            x.num = 42
            db.foo.save(x)
        l)多个文档更新,默认对查询到的结果只更新第一个,如果所有都要更新,可以设置update的第四个参数
        db.student.update({},{$set:{"age":18}},false,true)
3、得到操作的错误
    db.runCommand({"getLastError":1})
    {
        "err":null, //错误信息
        "updatedExisting":true, //都是已经存在的文档
        "n":5, //更新了5个文档
        "ok":true
    }
4、返回已经更新的文档 findAndModify
    update 和 remove必须要一个,也只能是其中的一个
        db.runCommand({
            "findAndModify": 要操作的集合名称,
            "query": 查询条件,
            "sort":排序方式,
            "remove":布尔类型 是否删除,
            "update":{}, 更新
            "new":布尔类型 默认返回更新前的文档
        })
        db.runCommand({
            "findAndModify":"student",
            "query":{"name":"pp"},
             "remove":true
        })

5、删除
    remove
6、查找 find
    a)find(query,{指定返回的键})
        db.student.find({"name":"pp"},{"name":1}) 只返回name字段
        db.student.find({"name":"pp"},{"_id":0,"name":0,"age":0}) 不返回"_id", name, age字段,其他字段都返回
    b)findOne(query,{指定返回的键})
    c)$lt 小于,$lte 小于等于,$gt 大于 ,$gte 大于等于,$ne 不等于
        db.student.find({"age":{"$lte":30,"$gte":20}})
    d)$in,$nin,$or
        db.student.find({"age":{"$in":[30,,4,3,20]})
        db.student.find({"$or":[{"age":{"$gte":20}},{"name":"pp"}]})
        
    e)$mod 求余
        查找年龄除以5余数为1的集合
        db.student.find({"age":{"$mod":[5,1]}})
        查找年龄除以5余数不为1的集合
        db.student.find({"age":{"$not":{"$mod":[5,1]}}})
    f)null值匹配本身,并且匹配不存在键值的记录
        db.student.find({"age":null})
    g)$exists
        db.student.find({"age":{"$exists":true})
    h)正则表达式
        db.student.find({"name":/^p[a-z]*p$/})
    i)数组查询 $all 多个组合条件查询
        db.food.insert({"fruit":["apple","banana","peach"],"price":1})
        db.food.find({"fruit":"apple"})
        db.food.find({"fruit":{$all:["apple","banana"]}})
    j)$size 数组长度查询
        db.food.find({"fruit":{$size:3}})
    k)$slice 返回数组中某一些记录,和之前不一样,使用$slice后,未提及的键也返回
        db.food.find({},{fruit:{$slice:2}})  返回前两个
        返回
          >>>{"fruit":["apple","banana"],"price":1}
        db.food.find({},{fruit:{$slice:-2}})  返回后两个
          >>>{"fruit":["banana","peach"],"price":1}
        db.food.find({},{fruit:{$slice:[1,2]}})  返回后两个   {$slice:[startIndex,count]}
          >>>{"fruit":["banana","peach"],"price":1}
    h)内嵌文档 $elemMatch组合查询
        {
            name:"pp",
            comments:{
                "author":"joe",
                "score":1
            }
            age:18
        }
        db.blog.find("comments":{$elemMath:{"author":"joe",score:{"$gte:5}}})
    i)$where 负责查询
        **.find({
            $where:function(){
                if(this.x>this.y){
                    return true;
                }else{
                    return false;
                }
            }
        })
    j)find返回游标
        var cursor = **.find(**)
    游标的函数
        cursor.hasNext  是否还有元素
        cursor.next 取下一个元素
        cursor.limit 取多少个
        cursor.sort 排序 对字段排序 1表示升序,-1标示降序
        cursor.skip 跳到第几个
7、建立索引
    db.student.ensureIndex({"name":1,"age":1})
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值