初始Mongodb

2022-09-08 19:08:38 浏览数 (1)

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}) 自增(负数表示自减) db.user.update({username:'test'},{$unset:{height:1}})删除height值 db.users.update({username:'test'},{$push:{like:'test'}})原来的属性之上添加 db.users.update({username:'test'},{$pop:{like:1}})删除最后一个 db.users.update({username:'test'},{$pull:{like:'test'}})指定删除

第二个参数 $set 更新某列 $unset 删除某个列 $rename 重命名某个列 $inc 增长某个列 第三个参数 $upsert (true/false):当为true时,如果第一个参数存在则更新,不存在则创建 $multi(true/false) 当为true时表示修改多行,即修改所有满足条件的列

代码语言:javascript复制
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}) — 限制查询 db.jobs.find().limit(4) db.jobs.find().skip(4).limit(4) — 排序 db.jobs.find().sort({ id:1//升序 -1降序 })

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

声明游标

代码语言:javascript复制
var cursor = db.stu.find();

通过游标取数据

代码语言:javascript复制
cursor.next()

一个一个的取显得麻烦,我们可以写一个while循环

代码语言:javascript复制
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

如下示例,计算每个栏目的商品数量总和

代码语言:javascript复制
var map = function(){
   emit(this.cat_id,this.goods_number);
  // 第一个参数为组成一组数据的依据
  //第二个参数为每组数据统计的字段
}
代码语言:javascript复制
var reduce = function(ca_id,values){
    //values:每个栏目的商品数量
    return Array.sum(values)//对每个栏目的商品数量汇总
}
代码语言:javascript复制
db.goods.mapReduce(map,reduce,{out:'res'})
//第三个参数out指定将结果输出到指定的表
db.res.find()//显示结果

0 人点赞