MongoDB基础知识
一、Mongodb简介
Mongodb是基于分布式文件存储的数据库,用C++编写;
Mongodb是nosql(not-only-sql)数据库;
Mongodb '无状态模式',不用去设计,直接用,存什么东西,取决于前边传什么东西;
Mongodb 由数据库、 集合、 文档组成;
Mongodb 单表可存档PB级别的数据(1PB = 1024TB) 可见数据存储量较大;
Mongodb 存储数据的格式是类Json,叫bson格式
二、Mongodb在windows命令窗的简单操作
1、简单操作
(1)获取当前的数据库名
>db.getName()
(2)创建数据库或切换数据库
>use dbName
(3)查看当前数据库状态
>db.stats()
(4)帮助命令
>db.help()
2、写入数据
(1)普通数据的添加
语法:db.tableName.insert({key:value})
db.student.insert({name:'parry',age:18,sex:'male'})
(2)多维数据对象的添加
语法:db.tableName.insert({key:{key1:'value1',key2:'value2'}})
db.student.insert({name:'kuanjun',age:18,sex:'male',home:{province:'Gansu',city:'PingLiang'}})
(3)数组信息的插入
语法:db.tableName.insert({key:[value1,value2,value3]})
db.student.insert({name:'Yangkuanjun',age:18,sex:'male',home:{province:'Gansu',city:'PingLiang'},score:[70,80,100]})
3、数据的查询
(1)笼统方式查询
语法:db.tableName.find() //查询数据表的全部数据 (select * from tableName)
语法:db.tableName.findOne() //查询数据表的第一条数据(select * from tableName limit 1)
经过查询我们发现之前插入的数据,多个一个字段_id,_id是mongodb本身的算法计算的,该_id对应的值‘全球唯一’,类似于我们关系型数据表中的主键ID。
注:_id我们可以自己指定(在insert的时候传入_id即可db.student.insert({_id:1,name:'parry',age:18,sex:'male'})),但是mongodb不推荐我们这样做。
(2)条件查询语句
条件:Bson对象
语法:db.tableName.find(条件)
例:查询集合student中 name = parry的记录信息
(类似于 select * from student where name='parry')
db.student.find({name:'parry'})
(3)范围查询
关键字:$gt $lt $gte $lte(依次类似于mysql的> < >= <=)
语法:db.tableName.find({key:{'$gt/$lt/$gte/$lte':value}})
例:查询年龄大于15的学生
db.student.find({age:{'$gt':15}})
注:关键字$get前后需要用引号,单双都可以
(4)设置多个查询条件(相当于mysql的and操作)
语法:db.tableName.find({条件,条件,条件})
例:查询姓别是男,年龄大于15的数据
db.student.find({sex:'male',age:{'$gt':15}})
(5)多维字段的查询
语法:db.tabeName.find({'key.name':'value'})
db.tabeName.find({'key.name':{'$gt':'value'}})
db.tabeName.find({'key1.name':{'$gt':'value1'},'key2.name':{'$lt':'value2'}})
例:查询home中,city=PingLiang的数据
db.student.find({'home.city:'PingLiang''})
(6)数组条件的查询
语法:db.find({key:'value'}) //数组元素值 有一个value存在即可
例:查询成绩有100分的学生信息
db.student.find({score:100})
语法:db.tableName.find({key:{'$all':[value1,value2]}}) //数组元素值需存在value1和value2(value1和value2的顺序不做要求)
例:查询成绩有100分和80分的学生信息
db.student.find({score:{'$all':[100,80]}})
(7)$or查询,多个条件,满足其中一个即可
语法:db.tableName.find({'$or':[{key1:'value1'},{key2:'value2'}]})
例:查询名字是parry或性别是female的
db.student.find({'$or':[{name:'parry'},{sex:'female'}]})
(8)限制查询字段
在实际操作中,我们不一定需要查询返回数据的所有字段,那么我们可以做一个字段输出查询的限制。如果全部字段取出来,对内存和带宽都有一定的开销,所以我们按需取字段即可。
语法:db.tableName.find({条件},{字段:1/0,字段:1/0}) //1:查询此字段 0:不查询此字段
规则:要输出就全部输出,要不输出就全部不输出
_id是比较特殊,默认是输出的,不过可以通过指定为0,就可以不输出了
4、修改数据
(1)语法:db.tableName.update({条件},{'$set':{key1:'value1',key2:'value2'}})
有$set的修改:只修改设置的字段,其他字段不变
例:修改集合student中名为parry的学生信息,设置年龄为16
(2)db.tableName.update({条件},{key1:'value1',key2:'value2'}})
没有$set的修改:只修改设置的字段,没有修改的在短就删除了(除了_id字段)
例:修改集合student中名为jiuyun的学生信息,设置年龄17,姓名zhangjiuyun
(3)字段有则直接修改,没有则添加为新字段
例:刚才修改的记录,丢失了性别,我们通过update添加上
5、删除数据
(1)删除记录
语法:db.tableName.remove(条件)
例:根据name,删除一条记录
(2)删除字段
语法: db.tableName.update({条件},{'$unset':{字段:1/0}})
6、排序sort()
在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列
语法:db.tableName.find().sort({KEY:1})
7、MongoDB索引
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。
MongoDB使用 ensureIndex() 方法来创建索引。
语法:db.colectionName.ensureIndex({key:1})
语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可。