mongodb入门

Mongodb是非关系型数据库(nosql ),属于文档型数据库数据存储为json类型

在传统的关系型数据库中,数据是以表单为媒介进行存储的,每个表单均拥有纵向的列和横向的行,相比较 MySQL,MongoDB 以一种直观文档的方式来完成数据的存储。它很像 JavaScript 中定义的 JSON 格式,不过数据在存储的时候 MongoDB 数据库为文档增加了序列化的操作,最终存进磁盘的其实是一种叫做 BSON 的格式,即 Binary-JSON。

常用命令
show databases 查看数据库
use database 使用某个数据库
show tables/collections 查看当前数据库的表

表操作

  1. 创建表:
    – 自动创建表:db.tablename.insert({})
    – 手动创建表:db.createCollections('name')

  2. 删除表
    -- db.tablename.drop();

  3. 删除数据库
    -- db.dropDatabase();

  4. 增删改查
    – 增加
    db.tablename.insert({_id:1,sex:'n'})
    – 增加多条数据
    db.tablename.insert([{_id:1},{_id:2}])
    – 删除
    db.table.remove()删除全部表内容
    db.table.remove({name:24})条件删除
    – 修改
    update接收三个参数,第一个参数为更新条件,第二个参数为更新值,第三个是一些选项
    db.table.update({name:'tz'},{$set:{name:'zt'}})
    db.table.update({条件},{$inc:{num:1}) 自增
    第二个参数
    $set 更新某列
    $unset 删除某个列
    $rename 重命名某个列
    $inc 增长某个列
    第三个参数
    $upsert (true/false):当为true时,如果第一个参数存在则更新,不存在则创建
    $multi(true/false) 当为true时表示修改多行,即修改所有满足条件的列

db.stu.update({name:"by"},{$inc:{uid:2}},{upsert:true});
  1. 查询
    – find
    db.table.find()查找全部内容
    db.table.find({age:34})查找age=34的记录
    db.table.find({age:{$gt:29}})查找年龄大于29
    db.table.find({age:{$lt:29}})查找年龄小于29
    db.table.find({age:{$lte:29}})查找年龄等于29
    db.table.find({age:{$in:[23,45]}})年龄在23或45
    db.table.find({age:{$nin:[23,45]}})年龄不在23或45
    db.table.find({age:{$all[1,2,3]}})age列是一个数组且查找的数据至少包含1,2,3
    db.table.find({age:{$exits:1}})查找有age的文档
    db.table.find({name:/test.*/},{name:1})查找name字段包含test
    – where表达式
    通过where表达式可以创建更加复杂的查找,但查询速度很慢,如
    db.stu.find({$where:'this.age%2==0 && id==1})

游标操作
游标是什么?
通俗的说,游标不是查询结果,而是查询的返回资源,或者接口.
通过这个接口,你可以逐条读取.
好处是不用一下把全部数据拿出来,减轻压力

声明游标

var cursor = db.stu.find();

通过游标取数据

cursor.next()

在这里插入图片描述
一个一个的取显得麻烦,我们可以写一个while循环

while(cursor.hasNext()){
    printjson(cursor.next());
}

在这里插入图片描述
索引创建
db.collection.getIndexes();查看索引状态
db.collection.ensureIndex({id:1/-1});创建普通索引1表示升序,-1表示降序
db.collection.ensureIndex({filed:1},{unique:true})创建唯一索引
db.collection.dropIndex({id:1/-1})删除单个索引
…dropIndexes()删除所有索引
db.collection.ensureIndex({field:’hashed’});创建hash索引
重建索引
一个表经过很多次修改后,导致表的文件产生空洞,索引文件也如此.
可以通过索引的重建,减少索引文件碎片,并提高索引的效率.
类似mysql中的optimize table
db.collection.reIndex()

Mongodb导出与导入
导出
cd /usr/local/mongodb/
./bin/mongoexport options
options 选项
-h 主机
-port 端口
-u 用户名
-p 密码
-d 数据库名
-c 表名
-f fie,fie,fie… 列名
-q “{name:‘tzs’}” 查询条件
-o 导出的文件名称
–type 导出的类型(json/csv)默认json
在这里插入图片描述
导入
选项
-d 数据库
-c 表
–type(json/csv) 导入的类型 如果选择了csv类型,需添加–headerLine 选项
–file 导入的文件

在这里插入图片描述

分组聚合操作
mongodb也可实现像mysql那样的group by操作,通过mapReduce。
不同的是mapReduce支持分布式,支持大量的服务器同时工作。
mapReduce的工作过程
1.map:将同一组的数据,映射到一个数组上
2.reduce 将数组的值进行运算
3.调用mapReduce 传入map和reduce
如下示例,计算每个栏目的商品数量总和

var map = function(){
   emit(this.cat_id,this.goods_number);
  // 第一个参数为组成一组数据的依据
  //第二个参数为每组数据统计的字段
}
var reduce = function(ca_id,values){
    //values:每个栏目的商品数量
    return Array.sum(values)//对每个栏目的商品数量汇总
}
db.goods.mapReduce(map,reduce,{out:'res'})
//第三个参数out指定将结果输出到指定的表
db.res.find()//显示结果
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值