美文网首页
分分钟进阶MongoDB

分分钟进阶MongoDB

作者: wuzsheng | 来源:发表于2018-09-16 16:11 被阅读18次
    mongoDB结构图

    数据库

    use mydb   //创建数据库,有则切换该数据库
    db.dropDatabase()  //删除数据库
    db    //显示当前位置
    show dbs  //查看数据库列表
    # mongo wu  //直接登录mongo并进入wu数据库
    
    db.stats  //显示当前数据库状态
    db.version()  //当前db版本
    db.getMongo()  //当前db的链接机器地址
    db.getPrevError() //查询之前的错误信息
    db.resetError() //清除错误记录
    

    集合

    db.createCollection("wu"); //创建集合
    db.zhi.insert({name:"zhi",age:8});  //创建集合并插入数据
    
    //创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个
    db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
    
    db.zhi.drop(); //删除集合
    
    show tables;  //显示集合
    show collections;  //显示集合
    
    db.zhi.renameCollection("wu")  //集合重命名
    db.zhi.count()  //查询当前集合的数据条数
    db.zhi.dataSize() //集合数据大小(字节)
    db.zhi.totalIndexSize()  //查看集合索引大小
    db.zhi.totalSize()  //显示集合大小(索引,数据)
    db.zhi.stats()  //显示集合状态
    db.printCollectionStats()  //当前db所有集合的状态信息
    

    文档

    插入数据

    插入数据
    
    方法一:
    db.zhi.insert({
    name:'lufei',
    sex:'man',
    destination:'haizeiwang',
    team:['suolong','xianjishi','shengping']})
    
    方法二:
    定义变量
    man=({name:'aishi',
    ... sex:'man',
    ... age:'18'})
    db.col.insert(man)
    
    
    方法三:
    一个集合插入多文档
    > db.zhi.insert([
    {book:'huanshu',price:'18',quantity:'good'}, 
    {woman:'chang teacher',sex:'nv',service:[{server1:'kuaicang',price:666},{server2:'baoye',price:999}]}
     ])
    //[{},{},{}],[]作用是包含多个{}且每个表的列可以不相同
    
    
    db.zhi.save()  //具有插入和更新数据功能
    //将col文档数据 替换为  以下数据(内容自己创建)
    >db.zhi.save({
    "_id" : ObjectId("222"),
    "title" : "MongoDB",
    "description" : "MongoDB 是一个 Nosql 数据库",
    "by" : "Runoob",
    "url" : "http://www.runoob.com";,
    "tags" : [
    "mongodb",
    "NoSQL"
    ],
    "likes" : 110
    })
    

    删除文档

    # 语法:
    db.collection.remove()
    
    #直接将条件为title':'MongoDB 教程' 的文档整个删除
    db.col.remove({'title':'MongoDB 教程'})
    
    #只删  第一个 满足该条件 文档
    db.col.remove({'title':'MongoDB 教程'},1)
    
    #删除所有数据
    db.col.remove({})
    

    查询文档

    db.zhi.find()   //集合zhi的数据
    db.duobiao.findOne()  #显示一行
    db.zhi.find().pretty() //有格式输出,集合zhi所有文档
    db.zhi.find({title:"wzs"}).pretty() //集合zhi中,title:“wzs”文档
    
    显示满足sex:man 或 title:wzs条件文档
    db.col.find({$or:[{sex:"man"},{title:'wzs'}]}).pretty()
    
    类似常规 SQL 语句为:'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'
    db.col.find({"likes": { $gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
    
    db.col.find({"likes" : {$gt : 100}})
    类似于SQL语句:
    Select * from col where likes > 100;
    $gte 相当于  >=
    $lte 相当于   <=
    $ne 相当于   !=
    
    db.col.find({likes : {$lt :200, $gt : 100}})
    #类似于SQL语句:
    Select * from col where likes>100  AND  likes<200;
    
    //显示age为8和21的文档
    db.col.find({"age":{$in:[8,21]}})
    
    //显示除了age为8和21的文档
    db.wu.find({"age":{$nin:[8,21]}})
    
    // limt和skip
    db.sheng.find().limit(2)  
    //显示集合两条文档db.sheng.find({},{_id:0,title:1}).limit{2}  //显示集合sheng,前两条的title信息注意没有{},则没有显示{_id:1,title:0} 也不会显示id等价于> db.col.find({},{_id:0,title:1}).limit(1).skip(1)skip(1)是跳过第一个
    
    db.duobiao.find({}).limit(1).skip(1)
    //limit 限制数输出
    //skip 跳过几行
    //显示第二行
    
    db.genxin.find({},{name:1,_id:0}).sort({name:-1})
    //sort({name:-1})  倒序  默认升序
    
    db.duobiao.find({},{book:1,"_id":0}).pretty()  //1代表显示,0不显示。默认为1
    //第一个{}表示查询范围  全部
    
    #条件之间的 , 相当于 and
    #RDBMS 采用的 WHERE 子句将会是: where by='tutorials point' AND title='MongoDB Overview'
    db.duobiao.find({"book":"huanshu","price":"18"})
    
    //$or:[{},{}] 相当于 or  {}与{}之间的条件可以是不同行
    db.duobiao.find({$or:[{book:"huanshu"},{name:"xxxxx"}]})
    
    //这个是and or一起使用
    //意:满足  book and pirce 18/19才可显示  所以只显示一个表
    db.duobiao.find({book:'huanshu',$or:[{price:'18'},{price:'19'}]})
    

    更新文档

    #更新文档col中title
    db.zhi.update({title:'MongoDB 教程'},{$set:{title:'wzs'}})  
    
    //若要修改多条相同的文档,则需要设置 multi 参数为 true
    db.zhi.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})  
    
    //更新单个文档
    //以name:'abc'为查询条件,将 age数据更新为28
    db.zhi.insert( {"name":"abc","age":"25","status":"zxc"})
    dbzhi.updateOne({"name":"abc"},{$set:{"age":"28"}})
    
    //更新多个文档
    db.zhi.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}})
    //$gt:"10" 大于 10
    
    #$set
    //更新文档col中title字段
    db.zhi.update({title:'MongoDB 教程'},{$set:{title:'wzs'}})
    
    //若要修改多条相同的文档,则需要设置 multi 参数为 true
    >db.zhi.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
    
    //更新单个文档
    //以name:'abc'为查询条件,将 age数据更新为28
    db.zhi.insert( {"name":"abc","age":"25","status":"zxc"})
    dbzhi.updateOne({"name":"abc"},{$set:{"age":"28"}})
    
    //更新多个文档
    > db.zhi.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}})
    //$gt:"10" 大于 10
    
    #$rename
    //mane为’zhi’的文档把字段age修改为ages
    db.wu.update({name:'zhi'},{$rename:{'age':'ages'}})
    
    #$unset
    //取消字段,去掉文档的某个字段
    db.wu.update({name:'jiang'},{$unset:{"company":1}})
    {"company":1}  //所要删除字段 值 填1或者真实值都行
    
    #$push
    //把元素追加到数组字段中,如字段不存在,则新增一个数组类型的字段
    db.wu.update({name:'jiang'},{$push:{phone:{age:12,address:'haha'}}})
    
    #$pushAll
    //$push追加一个元素   $pushAll追加多个元素
    db.wu.update({name:'b'},{$pushAll:{phone:[{home:'ha'},{moblie:132}]}})
    
    #$addToSet
    //增加一个值到数组内(没有才增加,有则不增加,避免重复)
    db.wu.update({name:'zhi'},{$addToSet:{phone:{file1:'456',wu: 'hash'}}})
    
    #$pop
    //只能删除数据第一个 或  最后一个
    //1  删除数组最后一个元素;-1  则删第一个
    db.wu.update({name:'b'},{$pop:{phone:1}})
    
    #$pull
    //删除数组中满足条件的元素
    db.wu.update({name:'b'},{$pull:{phone:{home:'ha'}}})
    
    #$inc
    //用于增加或减少数值
    //把name为a的文档age增加20;-20则减少20
    db.wu.update({name:"a"},{$inc:{age:20}})
    

    相关文章

      网友评论

          本文标题:分分钟进阶MongoDB

          本文链接:https://www.haomeiwen.com/subject/ztkfnftx.html