美文网首页
2019-04-12

2019-04-12

作者: fb941c99409d | 来源:发表于2019-04-12 03:24 被阅读0次

    基本概念

        数据库(database)
        集合(collection)
        文档(document)
            - 在MongoDB中,数据库和集合都不需要手动创建,
                当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合
    

    基本指令

        show dbs
        show databases
            - 显示当前的所有数据库
        use 数据库名
            - 进入到指定的数据库中
        db
            - db表示的是当前所处的数据库
        show collections
            - 显示数据库中所有的集合
    

    插入文档操作

    db.<collection>.insert([{name:"猪八戒",age:28,gender:"男"},{name:"猪八戒",age:28,gender:"男"}])
            - 向集合中插入一个或多个文档
            - 当我们向集合中插入文档时,如果没有给文档指定_id属性,则数据库会自动为文档添加_id
                该属性用来作为文档的唯一标识
            - _id我们可以自己指定,如果我们指定了数据库就不会在添加了,如果自己指定_id 也必须确保它的唯一性
            
    // 插入一个文档对象
    db.collection.insertOne({name:"猪八戒",age:28,gender:"男"})
    //插入多个文档对象
    db.collection.insertMany() 
    
    

    查询

    db.<collection>.find()
            - find()用来查询集合中所有符合条件的文档
            - find()可以接收一个对象作为条件参数
                {} 表示查询集合中所有的文档
                {属性:值} 查询属性是指定值的文档
            - find()返回的是一个数组
                
    db.<collection>.findOne()
            - 用来查询集合中符合条件的第一个文档  
            - findOne()返回的是一个文档对象 
           
    db.<collection>.find({}).count() 
            - 查询所有结果的数量
    
    db.stus.find({_id:"hello"});
    db.stus.find({age:16 , name:"白骨精"});
    db.stus.find({age:28});
    db.stus.findOne({age:28});
    db.stus.find({}).count();
    

    修改

    db.collection.update(查询条件,新对象)
            - update()默认情况下会使用新对象来替换旧的对象
            - 如果需要修改指定的属性,而不是替换需要使用“修改操作符”来完成修改
                $set 可以用来修改文档中的指定属性
                $unset 可以用来删除文档的指定属性
                $push 字段的值是数组时 可以用于向数组中添加一个新的元素 存在不存在都添加
                $addToSet 字段的值是数组时 可以用于向数组中添加一个新的元素,不存在则添加 
            - update()默认只会修改一个
                
            db.collection.updateMany()
            - 同时修改多个符合条件的文档
       
            db.collection.updateOne()
            - 修改一个符合条件的文档    
            
            db.collection.replaceOne()
            - 替换一个文档
    //替换
    db.stus.update({name:"沙和尚"},{age:28});
    //修改指定属性
    db.stus.update(
        {"_id" : ObjectId("59c219689410bc1dbecc0709")},
        {$set:{
            gender:"男",
            address:"流沙河"
        }}    
    )
    //删除指定属性
    db.stus.update(
        {"_id" : ObjectId("59c219689410bc1dbecc0709")},
        {$unset:{
            address:1
        }}    
    )
    //修改N个符合条件的属性
    db.stus.updateMany(
        {"name" : "猪八戒"},
        {
            $set:{
                address:"猪老庄"
            }
        }    
    );
        
    db.stus.update(
        {"name" : "猪八戒"},
        
        {
            $set:{
            address:"呵呵呵"
            }
        }  ,
        {
            multi:true//update()默认只会修改一条记录 指定这个参数可以一次修改多条记录
        }    
    )
    

    删除

    db.collection.remove()
            - 删除一个或多个,可以第二个参数传递一个true,则只会删除一个
            - 如果传递一个空对象作为参数,则会删除所有的
        db.collection.deleteOne()
        db.collection.deleteMany()
        db.collection.drop() 删除集合
        db.dropDatabase() 删除数据库
    

    CURD操作返回的结果

    <script type="text/JavaScript">
    use my_test 
            switched to db my_test
    db.user.insert({name:"mary",age:18})  
           WriteResult({ "nInserted" : 1 })
    db.user.find()
          { "_id" : ObjectId("5cac60342ed959b607737bd2"), "name" : "mary", "age" : 18 }
    db.user.insert([{name:"mary",age:18},{name:"kobe",age:19}])
          BulkWriteResult({
              "writeErrors" : [ ],
              "writeConcernErrors" : [ ],
              "nInserted" : 2,
              "nUpserted" : 0,
              "nMatched" : 0,
              "nModified" : 0,
              "nRemoved" : 0,
              "upserted" : [ ]
          })
    db.user.find()
          { "_id" : ObjectId("5cac60342ed959b607737bd2"), "name" : "mary", "age" : 18 }
          { "_id" : ObjectId("5cac61282ed959b607737bd3"), "name" : "mary", "age" : 18 }
          { "_id" : ObjectId("5cac61282ed959b607737bd4"), "name" : "kobe", "age" : 19 }
    db.user.find().count()
        3
    db.user.update({name:"kobe"},{$set:{address:"北京"}})
        WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    db.user.remove({"hobby.cities":"beijing"})
        WriteResult({ "nRemoved" : 1 })
    db.user.remove({}) //清空集合 必须加空{}
    db.user.drop() //删除集合
        true
    </script>
    
    

    练习

    //1.进入my_test数据库
    use my_test
    //2.向数据库的user集合中插入一个文档
    db.user.insert({name:"mary",age:18})  
    //3.查询user集合中的文档
    db.user.find()
    //4.向数据库的user集合中插入一个文档
    db.user.insert([{name:"mary",age:18},{name:"kobe",age:19}])      
    //5.查询数据库user集合中的文档
    db.user.find()
    //6.统计数据库user集合中的文档数量
    db.user.find().count()
    //7.查询数据库user集合中username为sunwukong的文档
    db.user.find({name:"kobe"})
    //8.向数据库user集合中的username为sunwukong的文档,添加一个address属性,属性值为huaguoshan
    db.user.update({name:"kobe"},{$set:{address:"北京"}})
    //9.使用{username:"tangseng"} 替换 username 为 zhubajie的文档
    db.user.update({name:"mary"},{name:"wada"})
    //10.删除username为sunwukong的文档的address属性
    db.user.update({name:"kobe"},{$unset:{address:1}})
    
    //11.向username为sunwukong的文档中,添加一个hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}
    db.user.update({name:'kobe'},{$set:{hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}}})
    //12.向username为tangseng的文档中,添加一个hobby:{movies:["A Chinese Odyssey","King of comedy"]}
    db.user.update({name:"mary"},{$set:{hobby:{movies:["A Chinese Odyssey","King of comedy"]}}})
    //13.查询喜欢电影hero的文档
    db.user.find({"hobby.movies":"hero"})
    //14.向tangseng中添加一个新的电影Interstellar
    db.user.update({name:"mary"},{$addToSet:{"hobby.movies":"Interstellar"}})
    //15.删除喜欢beijing的用户
    db.user.remove({"hobby.cities":"beijing"})
    //16.删除user集合
    db.user.remove({})
    db.user.drop()
    show dbs
    
    //17.向numbers中插入20000条数据 time: 0.2s
    var arr =[]
    for(var i=1;i<=20000;i++){
        arr.push({number:i});
    }
    db.numbers.insert(arr);
    db.numbers.find()
    db.numbers.remove({})
    db.numbers.drop()
    //向numbers中插入5000000条数据 time: 72.9s
    var count=5000000
    var arr =[]
    for(var i=1;i<=count;i++){
        arr.push({number:i});
    }
    db.numbers.insert(arr);
    //向number中以每次1万条 批量插入500万条数据  time: 68.2s
    var count=5000000
    var arr =[]
    for(var i=1;i<=count;i++){
        arr.push({number:i});
        if(arr.length%100000==0 || i>=count){
            db.numbers.insert(arr);
            arr=[];
        }
        
    }
    
    
    //18.查询numbers中num为500的文档
    db.numbers.find({number:500})
    //19.查询numbers中num大于5000的文档
    db.numbers.find({number:{$gt:5000}})
    //20.查询numbers中num小于30的文档
    db.numbers.find({number:{$lt:30}})
    //21.查询numbers中num大于40小于50的文档
    db.numbers.find({number:{$gt:40,$lt:50}})
    //22.查询numbers中num大于19996的文档
    db.numbers.find({number:{$gt:19996}})
    //23.查看numbers集合中的前10条数据
    db.numbers.find({number:{$lte:10}})
    db.numbers.find({number:{$lt:11}})
        //limit()设置显示数据的上限
        db.numbers.find().limit(10);
    //24.查看numbers集合中的第11条到20条数据
    db.numbers.find({number:{$gt:10,$lte:20}})
        //skip()用于跳过指定数量的数据 
        db.numbers.find().skip(10).limit(10)
    //25.查看numbers集合中的第21条到30条数据
    db.numbers.find({number:{$gt:20,$lte:30}})
    db.numbers.find().skip(20).limit(10)
    //26.将dept和emp集合导入到数据库中
    
    
    //27.查询工资小于2000的员工
    //28.查询工资在1000-2000之间的员工
    //29.查询工资小于1000或大于2500的员工
    //30.查询财务部的所有员工
    //31.查询销售部的所有员工
    //32.查询所有mgr为7698的所有员工
    //33.为所有薪资低于1000的员工增加工资400元
    
    

    相关文章

      网友评论

          本文标题:2019-04-12

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