2019-04-12

2019-04-12  本文已影响0人  fb941c99409d

基本概念

    数据库(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元

上一篇下一篇

猜你喜欢

热点阅读