zoukankan      html  css  js  c++  java
  • mongoDB 读书笔记(初级命令)

    关于mongoDB的相关知识,读书笔记,便于自己查阅用,不定期更新(纯手打)        《mongoDB权威指南》

    一、创建更新和删除

      1.创建

    //批量插入一个集合可以节省时间,只用一次Tcp
    //插入时转成bson,并且数据不能大于4mb
    
    db.blog.insert({"name":"RedWolf"}) //插入一个文档 文档有一个name键

    var temp={"name":"Dog"} db.blog.insert(temp) //插入一个文档 文档有一个name键

          2.删除

    db.blog.remove({})             //删除blog中的所有文档,但不会删除集合本身以及索引 
    
    db.blog.remove({"age":"18"})  //删除blog中所有age为18的文档
    
    //如果追求速度   删除整个集合,然后再重新创建索引会比较快 相对于删除所有文档
    
    db.blog.drop()      //未验证是否真的快很多

      3.更新

    db.blogs.insert({"name":"joe",age:18,frineds:"tom"})
    //以下是更新步骤
    var joe=db.blogs.findOne({"name":"joe"})  //此处不可用find()  find返回的是游标
    joe.relationship={"friends":"kate"}
    joe.age=19
    db.blogs.update({"name":"joe"},joe);//将修改后的文档进行更新   如果集合中存在多个name为joe的文档,则会尝试更新多条,但是joe中的_id是固定的,所以会造成错误。更新时需注意唯一性

        3.1修改器

     一般只需修改文档中的部分内容,此时采用修改器比较合适(原子性)

    //eg1 记录页面被访问次数的文档,每当被访问的时候加一  $inc 对之后的键加指定值(该值为负可实现减法)  如果键不存在则会添加该建并置为指定值
    db.web.insert({"pageName":"cnblogs","times":1})
    db.web.update({"pageName":"cnblogs"},{"$inc":{"times":1}})
    //eg2 直接修改值        $set 会直接修改  如果修改的键不存在,则会添加该键并置为指定值
    db.web.update({"pageName":"cnblogs"},{"$set":{"times":88}})
    
    //eg3 修改内嵌值
    db.blog.update({"name":"joe"},{"$set":{"relationship.friends":"Lin"}})
    //eg4 删除指定键       $unset会删除指定键  该例中会删除age键
    db.blog.update({"name":"joe"},"&unset":{"age":1}) 
    //对数组的操作         $push 会插入到数组的末尾
    db.web.insert({"name":"test","bin":[1,2,3,4,6]})
    db.web.update({"name":"test"},{"$push":{bin:5}})
    
    db.web.insert({"name":"try","bin":[{"id":1},{"id":2}]})
    db.web.update({"name":"try"},{"$push":{"bin":{"id":3}}})
    //数组操作  $ne配合 $push
    db.web.insert({"name":1,"bin":[1,2,3]});
    db.web.insert({"name":2,"bin":[1,2,3,4]});
    
    db.web.update({"name":{"$ne":1}},{"$push":{"bin":4}})//为name为1的文档中的bin添加4
    db.web.update({"bin":{"$ne":4}},{"$push":{"bin":4}}) //若bin中没有4,则添加4
    //addToSet  如果没有则添加  取代了$ne和$push的组合
    
    db.web.update({"name":1},{"$addToSet":{"bin":20}}) //对于name为1的文档如果bin中没有20则添加
    //$addToSet 配合 $each 添加数组中不同的内容
    
    db.web.update({"id":1},{"$addToSet":{"bin":{"$each":[1,2,3,4,5]}}})
    //删除数组中的元素    $pop
    
    db.web.update({"id":1},{"$pop":{"bin":1}})   //从数组末尾删除一个
    db.web.update({"id":1},{"$pop":{"bin":-1}})   //从数组开头删除一个
    
    //删除数组中的元素    $pull
    db.web.update({"id":1},{"$pull":{"bin":1}})   //从数组中删除所有为1的项
    //数组的定位操作  $
    
    db.web.update({"bin":3},{"$inc":{"bin.$":3}})
    // $upsert      有则更新,没有则根据查询条件和更新内容添加新文档 update的第三个参数为true则为upsert
    
    db.web.update({"id":3},{"$push":{"bin":8}},true)
    //  $save    存在_id使调用upsert 否则调用insert
    
    var x=db.web.findone();
    x.id=9
    db.web.save(x)
    //更新匹配的多个文档
    //正常情况下即使匹配多个也只更新匹配到的第一条,update的第四个参数为true则匹配多条
    
    db.web.update("id":{"$ne":100},{"&push":{"bin":100}},false,true) //为所有id不为100的文档的bin添加100

    二、查询

    //用逗号隔开为多个条件   条件1and条件2
    db.web.find({"id":1,"name":"blog"})
    //返回指定的键    find函数的第二个参数指定要返回和不需要返回的键 1为需要返回 0为不需要返回
    db.web.find({"id":1},{"id":1,"_id:0"})
    // $lt $lte $gt $gte 分别对应    < <=  > >=
    
    db.web.find({"age":{"$gt":10,"$lt":18}}) //查找age在(10,18)范围的文档 
    var date=new Date db.web.find({"datetime":{"$gt":date}})
    // $in  某个键值匹配任意一项   $or  任意一个条件达成
    
    db.web.find({"id":{"$in":[1,2,3]}})   //查找id为 1 2或3 的文档
    db.web.find({"$or":[{"id":1},{"age":3}]})  //查找id为1或年龄为3的文档
    // $mod取余  $not 取反
    
    db.web.find({"id":{"not":{"$mod:[5,1]"}}})  
    //取id 除5后不余1的id    如2,3,4,5,7
    //正则表达式          /××××××××××/
    
    db.web.find({"name":/[0-9]*/})      //查找名称为数字的文档
    //查询数组   $all   
    
    db.web.find({"bin":{"$all":[1,2,3]}})    //查找bin中包含1,2和3的文档
    //要查询键存在,但是值为null的文档 用$exist
    
    db.web.find({"address":{"$in":[null],"$exist":true}})
    //查询指定长度的数组  $size
    
    db.web.find({"bin":{"$size":4}})   //查询bin有四个元素的文档
    //返回指定数量       $slice
    
    db.web.findOne({"id":{"$not":5}},{"comments":{"slice":10}}) //返回符合条件的前10条
    db.web.findOne({"id":{"$not":5}},{"comments":{"slice":-10}}) //返回符合条件的后10条
    db.web.findOne({"id":{"$not":5}},{"comments":{"slice":[5,7]}}) //返回符合条件的6-13的元素
  • 相关阅读:
    python学习笔记——拾
    python学习笔记——玖
    Python 实现栈与队列
    Vijos1774 机器翻译 [模拟]
    Vijos1788 第K大 [模拟]
    Python 序列求和
    HDU 2102 A计划 DFS与BFS两种写法 [搜索]
    Python 多组输入
    Python 文件读写
    HDU 2068 RPG错排 [错排公式]
  • 原文地址:https://www.cnblogs.com/mamuluke/p/4792424.html
Copyright © 2011-2022 走看看