[笔记]mongodb一
一、MongoDB介绍
MongoDB是一个由c++编写的基于分布式文件存储的数据库。MongoDB介于关系型数据库和非关系型数据库之间,是非关系型数据库中功能最丰富,最接近关系型数据库。具有高性能,易使用,易部署的特点,同时MongoDB还能跨平台。
二、MySql和MongoDB对比
MySql | MongoDB | 说明 |
database | database | 数据库 |
table | collection | 集合 |
row | document | 文档 |
column | field | 字段 |
index | index | 索引 |
primary key | _id | 主键 |
join | 内嵌文档 | 最像关系型的原因 |
document:以json键值对的形式存储。
collection:document的集合。
_id:每一个document都有一个_id。
MongoDB组织结构:数据库>>集合
三、MongoDB库的操作
1)、登录
1、mongo:默认连接到test库,test可以不存在。
查看有哪些数据库:show dbs
退出数据库:exit,或者quit()
2、mongo ip:port/dbname:指定IP,端口,数据库
2)、切换或创建库
use dbname:默认情况下如果不做任何操作,不会保留新创建的数据库
3)、删除库
use dbname:切换到目标数据库
db.dropDatabase:删除目标数据库
4)、查看当前所在库名
db或者db.getName()
5)、查看当前库的集合
show tables或者show collections
四、新增文档
db.collectionName.insert({key1:intVal1,key:'charVal',key3:['intVal','charVal',……] } )
collectionName是目标集合名
db.collectionName.save()功能和insert类似,区别在于如果在save中指定已经存在的_id,则会相当于update,会修改原数据
批量新增数据:db.sourceCollection.find().forEach(function(x){db.newCollection.insert(x)})
反复执行这条指令,只会插入一次
五、查看文档
db.collectionName.find(COND_JSON,SHOW_JSON)
1、db.collectionName.find():查看集合下所有文档
2、db.collectionName.find({key1:intVal,key2:'charVal',……}):查看集合下所有满足key1=inVal,key2='charVal',……的文档
3、db.collectionName.find({key1:{$gt:intVal},key2:'charVal',……}):查看集合下所有满足key1大于inVal,key2='charVal',……的文档
$gt=greater than 大于
$lt=less than 小于
$lte=less than equal 小于等于
$gte=greater than equal 大于等于
$ne=not equal 不等于
4、db.collectionName.find({},{key1:1,key2:1,……}):查看集合所有文档,并且只显示key1,key2,……等部分列。db.collectionName.find({},{key1:1,key2:1,……,_id:0})显示部分列且不显示_id列
5、db.collectionName.find({ $or : [ {key1:intVal1},{key1:intVal2} ] }):查看集合下key1=intVal1或者key1=intVal2的文档。db.collectionName.find( {key1: {$in:[intVal1,intVal2]} } )同前。db.collectionName.find( {key1: {$nin:[intVal1,intVal2]} } )查看key1!=intVal1或者key!=intVal2的文档
6、db.collectionName.find({key:null }):显示key为空的文档,没有key字段也符合条件
7、db.collectionName.find().sort( { key:1}):显示文档按key的升序排列。db.collectionName.find().sort( { key:-1})按降序排列
8、db.collectionName.find().skip(intVal1).limit(intVal2):跳过intVal1条数据,显示intVal2条数据
六、修改文档
db.collectionName.update( <query>, <update>, { upsert: boolVal, multi: boolVal,……}):<query>要修改的文档,<update>要修改成的数据。upsert,如果条件不存在是否新增数据,默认是false。multi,是否修改多条,默认是false,只更新找到的第一条。
db.collectionName.update( {key1: val}, {$set : {key2: val} } ):指定set,只会修改key2的值,不会覆盖。如果不指定set,会将{key2:val}直接覆盖原文档。
七、删除文档
db.collectionName.remove( <query>, {justOne: boolVal, writeConcern: <document> } ):<query>要删除的文档。justOne,是否只删除一个,默认是false。writeConsern默认使用WriteConsern.NORMAL 仅仅抛出网络异常
db.collectionName.drop()删除集合
八、索引
索引的作用:提高查询效率
db.collectionName.ensureIndex( {key:1} ):创建key的索引
db.collectionName.dropIndex( {key:1} ):删除key的索引
九、聚合函数
db.collectionName.aggregate( {$group: {_id: "$key", ……} }):指定集合collectionName按照key分组。
db.collectionName.find().count():显示集合的记录总数