欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mongodb数据库

程序员文章站 2022-03-09 08:12:54
...

mongodb数据库的学习使用

一, mongodb简介和概念

  1. 非关系型的 NOSQL
  2. 跨平台
  3. 非关系型里最像关系型的
  4. 排名
  5. 特点

mongodb数据库

1,文档: 就是json ,就是键值对
2, 集合: 文档的集合

mongodb数据库

  1. mysql: 用户 - 库 - 表
  2. mongo: 库 - 集合

    二, mongodb的使用

库的操作

登陆 默认连接到test库,但是test可以不存在

查看哪些库

show dbs

mongodb数据库

如何创建库 – use 可以切换库,但是库可以不存在,如果对数据进行操作,库会保留下来

use mydb1

mongodb数据库

如何删库?

     第一步 切库 
§ > use tutorial
     第二步 删库  db.drop tab键有提示
> db.dropDatabase()

mongodb数据库

查看当前库有哪些集合

show tables
show collections

mongodb数据库

三, 文档的插入数据

语法 : db.collection_name.insert(json)

插入数据

db.songli.insert({id:90, name:’杨艳’, age:25})

mongodb数据库

发现字段个数可以不同,类型也可以不同

db.songli.insert({id:2,name:’陈丽’,age:’29’,sex:’ma女’})

mongodb数据库

内嵌文档的玩法

db.songli.insert({ id:3,name:’王蓉’,age:28,like:{wuliep:’iandao’,chi:’深度看风景’} })

mongodb数据库

save 指令大多数时候与insert相同,当指定了_id的时候,save相当于调用update

db.songli.save({id:4,name:’王盼盼’,age:55})

mongodb数据库

批量新增

格式:db.SRC_COLL.find().forEach( function(x){ db.NEW_COLL.insert(x)} )
SRC_COLL 原集合
NEW_COLL 新集合

db.songli.find().forEach( function(x){ db.chenli.insert(x)} )

mongodb数据库

注意执行的时候,主键不会重复,反复插入,相同数据不会增加

四,查看文档

语法:db.COLLECTION_NAME.find(COND_JSON,SHOW_JSON)

DBQuery.shellBatchSize=30 设置默认显示行
1. 查看巴萨队内全部球员

db.Barca.find()
mongodb数据库

  1. 查看梅西的详细信息

    db.Barca.find({ name:’messi’ })

  2. 查看年龄为29,并且是踢中后卫(pos为CB)的球员

    db.Barca.find({ $and:[{age:29},{pos:’CB’}] })

  3. 查看年龄大于25,并且是中场的球员 MF
    大于 gtgreaterthanlt less than
    大于等于 gtegreaterequalthanlte
    不等于 $ne not equal

    db.Barca.find({ and:[ { age:{gt:25} },{pos:’MF’}] })

  4. 上述查询只返回一条记录,findOne到一个就返回.sort

      db.Barca.findOne({ $and:[ { age:{$gt:25} },{pos:'MF'}]    })
    

    db.Barca.find({ and:[ { age:{gt:25} },{pos:’MF’}] }).pretty()

  5. 显示球员姓名,年龄,位置 部分列显示 需要使用show_json,1代表显示,0代表不显示

db.Barca.find({},{name:1,age:1,pos:1})
db.Barca.find({},{name:1,age:1,pos:1,_id:0})

  1. 显示球员的不同年龄

db.Barca.distinct(‘age’)

重点部分

1,显示进球数超过30的球员信息 lgdata的第一个值代表进球数,第二个值代表助攻数
db.Barca.find({ “lgdata.0”:{$gt:30} } )

2,显示助攻数超过20的球员信息
db.Barca.find({ “lgdata.1”:{$gt:20} } )

3,显示年龄是24或者29的球员信息 select * from Barca where age = 24 or age =29;
db.Barca.find( { $or:[{age:24},{age:29}] })

4,显示年龄不是24或者29的球员信息
db.Barca.find( { age:{$nin:[24,29]} })

5, 显示位置为空的球员信息 pos为null 或者没有pos都能找到

db.Barca.find({ pos:null })

6, 将球员按照年龄排序 sort排序 1代表升序,-1代表降序

db.Barca.find().sort( {age:1})

7, 显示第11名球员信息

db.Barca.find().skip(10).limit(1)

五, 修改文档

语法:

2017年11月16日
11:27

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
<query>  条件 
 <update>  对应要修改的内容
upsert  如果条件不存在,<update>的内容是否作为新增,默认是false  
multi:   是否一次修改多条 ,默认是false 
writeConcern: <document> 异常类型  WriteConcern.NORMAL

1, 将vhalirvic的位置修改为null

db.Barca.update( { name:’vhalirvic’},{ $set:{pos:null} })

2, 将 vhalirvic 的年龄改为25岁,位置改成SB

db.Barca.update( { name:’vhalirvic’},{ $set:{pos:’SB’,age:25} })

3, 将pos为null的球员信息修改为 pos=MF

db.Barca.update( { pos:null},{ $set:{pos:’MF’} })

4 , 将年龄为24的球员年龄全部修改为 25

db.Barca.update({age:24},{ $set:{age:25} })

5,multi起作用,一次修改多条
db.Barca.update({age:24},{ $set:{age:25} },{upsert:false,multi:true})

6,相当于 覆盖原内容

db.Barca.update({age:25},{ age:30 })

    > db.Barca.update({name:'lixunhuan'},{id:1,name:'lixunhuan'},{upsert:false,multi:false})
    WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })

,7,upsert起作用

db.Barca.update({name:’lixunhuan’},{id:1,name:’lixunhuan’},{upsert:true,multi:false})

六, 删除文档

语法:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
<query>  删除的条件
justOne 是否只删除一条,false 

db.Barca.remove({age:25})
WriteResult({ “nRemoved” : 7 })

删除集合

db.Barca.drop()
true

集合是第一次新增数据的时候创建的

七,索引

**索引是通过有序来提高查询效率的
查看所有索引**

db.system.indexes.find()

mongodb数据库

ns 代表集合名
key 代表 按哪个字段建的索引 “_id” : 1 1 代表升序索引 -1代表降序索引 段 自动创建索引

创建索引
按照名字创建升序索引

db.Barca.ensureIndex({name:1})
如何使用索引 必须作为查询条件

BasicCursor 代表未使用索引

db.Barca.find({age:24}).explain()
{
“cursor” : “BasicCursor”,
“isMultiKey” : false,
“n” : 6,
“nscannedObjects” : 22,
“nscanned” : 22,
“nscannedObjectsAllPlans” : 22,
“nscannedAllPlans” : 22,
“scanAndOrder” : false,
“indexOnly” : false,
“nYields” : 0,
“nChunkSkips” : 0,
“millis” : 0,
“server” : “localhost.localdomain:27017”,
“filterSet” : false
}

使用索引的情况 BtreeCursor name_1

db.Barca.find({name:’messi’}).explain()
{
“cursor” : “BtreeCursor name_1”,
“isMultiKey” : false,
“n” : 1,
“nscannedObjects” : 1,
“nscanned” : 1,
“nscannedObjectsAllPlans” : 1,
“nscannedAllPlans” : 1,
“scanAndOrder” : false,
“indexOnly” : false,
“nYields” : 0,
“nChunkSkips” : 0,
“millis” : 0,
“indexBounds” : {
“name” : [
[
“messi”,
“messi”
]
]
},
“server” : “localhost.localdomain:27017”,
“filterSet” : false
}

cursor”:“BasicCursor”表示本次查询没有使用索引;“BtreeCursor  name_1 ”表示使用了name上的索引;
            “isMultikey”表示是否使用了多键索引;
            “n”:本次查询返回的文档数量;
            “nscannedObjects”:表示按照索引指针去磁盘上实际查找实际文档的次数;
            ”nscanned“:如果没有索引,这个数字就是查找过的索引条目数量;
            “scanAndOrder”:是否对结果集进行了排序;
            “indexOnly”:是否利用索引就能完成查询; db.Barca.find( {name:'neymar'},{_id:0,name:1} ).explain()
            “nYields”:如果在查询的过程中有写操作,查询就会暂停;这个字段代表在查询中因写操作而暂停的次数;
            “ millis”:本次查询花费的毫秒数,数字越小说明查询的效率越高;
            “indexBounds”:这个字段描述索引的使用情况,给出索引遍历的范围。
            "filterSet" : 是否使用和索引过滤;

删除索引

db.Barca.dropIndex({name:1})
{ “nIndexesWas” : 2, “ok” : 1 }

八,聚合函数

聚合函数:分组函数

1,显示集合的记录总数

db.Barca.find().count()

2,求各个位置的最小年龄 select pos,min(age) from Barca group by pos;

db.Barca.aggregate( {$group:{_id:"$pos",minage:{$min:"$age"}}} ) 
    $group 操作符 作为分组使用
    按什么分组 _id 就对应什么内容 
    "$pos"pos的实际值
    "$age" 取age 的实际值 

4,求各个位置的最大年龄

    db.Barca.aggregate( {$group:{_id:"$pos",maxage:{$max:"$age"}}} ) 

5, 求各个位置的平均年龄

db.Barca.aggregate( {$group:{_id:"$pos",avgage:{$avg:"$age"}}} ) 

6, 求各个位置的年龄和

    db.Barca.aggregate( {$group:{_id:"$pos",sumage:{$sum:"$age"}}} ) 

7, 统计各个位置的人数 select count(*),pos from Barca group by pos;

    db.Barca.aggregate( {$group:{_id:"$pos",count:{$sum:1}}} ) 

mongodb数据库

8, 统计不同位置不同年龄的人数 group by pos,age

db.Barca.aggregate( {$group:{_id:{xpos:"$pos",xage:"$age"},count:{$sum:1}}})

mongodb数据库

相关标签: mongodb