Mongodb 基础(Z)

Mongodb的客户端支持

作为一款非常成熟NoSQL数据库,Mongdb对各种编程语言的支持已经非常完善了,目前已经支持各大主流编程语言包括:

1,mongo shell 

2,Python

3,Java 

4,c# 

5,Node.js 

6,c++ 

在这些语言里面,最简单,最轻巧的就莫属mongo shell了,无须任何其他的依赖环境,只需要一个mongo客户端,就可以连接本地的,远程的各个mongo库了,这非常像各个数据库的界面工具,如Navicat,Sql Plus等, 交互式能力非常强,想要什么数据,很快就能直接查出来,当然想要运用的更灵活,肯定是嵌入到编程语言里面了。

Mongodb包结构介绍

1,mongo核心脚本进程

mongo ->mongo的交互式shell 

mongod -> 数据库进程 

mongos -> 查询路由控制器

2,二进制导入导出工具

mongodump ->创建bson文件导出来自mongod实例 
mongorestore ->恢复上面导出的备份文件 
bsondump ->转换bson文件成json文件 
mongooplog ->记录一些正常副本的流式log

3,文本导入导出工具

mongoimport -> 导入来自csv,json,tsv的数据 
mongoexport -> 导出mongo数据到csv,json,tsv格式的文件里

4,诊断工具

mongostat ->能够查看当前运行实例的副本,实例,集合,coll状态 
mongotop -> 能够查看当前实例的读写比例和花费时间 
mongosniff ->提供一个近实时的数据状态跟踪明细 
mongoperf ->能够查看当前实例磁盘IO的性能

如何以js方式操作mongo表数据?

假如我们现在有一个需求,读取某个mongo库的一个表,然后清洗相关字段,再输入到一个本地文件里面,如何用js完成,封装的逻辑? 
定义的js如下:

//查询一个表实例所有数据,得到一个游标
var cursor=db.collection1.table1.find();
cursor.forEach( 
function(doc) { var split="\1";//分隔符 var anyCpyNo=doc.anyCpyNo+"";//主键 var cpyName=doc.cpyName+"";//企业名称 var logoUrl=doc.cpyOtherResource+""!='undefined'?doc.cpyOtherResource.logoUrl:"";//图片的url var provinceCode=doc.provinceCode+"";//省份编码 var cityCode=doc.cityCode+"";//城市编码 var modifyTime=new Date(doc.modifyTime).getTime();//更新时间 var cpyNatureCode=doc.cpyNatureCode+"";//企业性质+双引号,转成字符串 var cplen=cpyNatureCode.length if(cpyNatureCode!='undefined'&& cplen > 2 ){ cpyNatureCode=cpyNatureCode+"#"+cpyNatureCode.substr(0,2)+"00"; } var foundDate=new Date(doc.foundDate).getTime();//成立时间 var subIndustryCode=doc.subIndustryCode;//行业标准 if(subIndustryCode!='undefined' && subIndustryCode+"".length > 2){ subIndustryCode=subIndustryCode.substr(0,2)+"00"; } var legalPerson=doc.legalPerson;//法定代表人 if(legalPerson==='undefined'){ legalPerson=doc.manager; } var loc=doc.location+""//地址 if(loc==='undefined'){ loc=doc.businessPlace; } var regCode=doc.regCode+"";//工商注册号 var orgCode=doc.orgCode+"";//组织机构代码 var regCapital=doc.regCapital+""!='undefined'?doc.regCapital.amount+""!='undefined'?doc.regCapital.amount:"":"";//注册资金 var taxRegCode=doc.taxRegCode+"";//税务登记号码 var r=anyCpyNo//主键 +split+cpyName//公司名 +split+logoUrl//图片url +split+provinceCode//省份编码 +split+cityCode//城市编码 +split+modifyTime//更新时间 +split+cpyNatureCode//企业性质 +split+foundDate//成立时间 +split+subIndustryCode//二级行业标准的顶级类目 +split+legalPerson//法定代表人 +split+loc//地址 +split+regCode//工商注册号 +split+orgCode//组织机构代码 +split+regCapital//注册资金 +split+taxRegCode;//税务登记号码 r=r.replace(/\r/gi, "");//Js正则去掉换行字符 r=r.replace(/\n/gi, "");//Js正则去掉换行字符 r=r.replace(/undefined/gi,"");//Js正则去掉未定义的语句 print(r);//输入拼接的整行内容 } );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

如何在Centos中向mongos提交执行js?

mongo --quiet   ip:host/dbname <  test.js >> data
//--quiet执行静默模式,去掉系统打印信息
//ip mongo服务所在机的ip地址
//host mogo服务对外提供的访问端口 //dbname 是指要链接的数据库名字 // test.js 是我们要执行的js文件 // data 是我们输出的内容写入data文件里面 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

一些Mongo的与SQL对应的操作语句

操作  
SQ语法
Mongodb语法

建表
CREATE TABLE users (id MEDIUM INT NOTNULL AUTO_INCREMENT,user_idVarchar(30),ageNumber,statuschar(1),PRIMARYKEY(id)) db.users.insert({user_id:"abc123",age:55,status:"A"}) users集合可以不存在,在插入第一条时会创建,当然也可以 提前创建,执行语句:db.createCollection("users") 新增字段 ALTER TABLE users ADD join_date DATETIME db.users.update({},{$set:{join_date:newDate()}},{multi:true}) 删除字段 ALTER TABLE users DROP COLUMN join_date db.users.update({},{$unset:{join_date:""}},{multi:true}) 建立索引 CREATE INDEX idx_user_id_asc ON users(user_id) db.users.createIndex({user_id:1}) 建立索引指定排序 CREATE INDEX idx_user_id_asc_age_desc ON users(user_id,ageDESC) db.users.createIndex({user_id:1,age:-1}) 删除一个表 DROP TABLE users db.users.drop() 插入数据 INSERTINT Ousers (user_id,age,status) VALUES ("bcd001",45,"A") db.users.insert({user_id:"bcd001",age:45,status:"A"}) 查询1 SELECT * FROM users db.users.find() 查询2 SELECT id,user_id,status FROM users db.users.find({},{user_id:1,status:1}) 查询3 SELECT user_id,status FROM users db.users.find({},{user_id:1,status:1,_id:0}) 查询4 SELECT * FROM users WHERE status = "A" db.users.find({status:"A"}) 查询5 SELECT user_id,status FROM users WHERE status = "A" db.users.find({status:"A"},{user_id:1,status:1,_id:0}) 查询6 SELECT * FROM users WHERE status != "A" db.users.find({status:{$ne:"A"}}) 查询7 SELECT * FROM users WHERE status="A" AND age=50 db.users.find({status:"A",age:50}) 查询8 SELECT * FROM users WHERE status="A" OR age = 50 db.users.find({$or:[{status:"A"},{age:50}]}) 查询9 SELECT * FROM users WHERE age > 25 db.users.find( {age:{$gt:25}} ) 查询10 SELECT * FROM users WHERE age < 25 db.users.find({age:{$lt:25}}) 查询11 SELECT * FROM users WHERE age > 25 AND age <= 50 db.users.find({age:{$gt:25,$lte:50}}) 查询12 SELECT * FROM users WHERE user_id like "%bc%" db.users.find({user_id:/bc/}) 查询13 SELECT * FROM users WHERE user_id like "bc%" db.users.find({user_id:/^bc/}) 查询14 SELECT * FROM users WHERE status="A" ORDER BY user_id ASC db.users.find({status:"A"}).sort({user_id:1}) 查询15 SELECT * FROM users WHERE status="A" ORDERBY user_id DESC db.users.find({status:"A"}).sort({user_id:-1}) 查询16 SELECT COUNT(*) FROM users db.users.count() 或者 db.users.find().count() 查询17 SELECT COUNT (user_id) FROM users db.users.count({user_id:{$exists:true}}) db.users.find({user_id:{$exists:true}}).count() 查询18 SELECT COUNT(*) FROM users WHERE age>30 db.users.count({age:{$gt:30}}) 或者 db.users.find({age:{$gt:30}}).count() 查询19 SELECTDISTINCT(status) FROMusers db.users.distinct("status") 查询20 SELECT * FROM users LIMIT 1 db.users.findOne() db.users.find().limit(1) 查询21 SELECT * FROM users LIMIT 5 , 10 db.users.find().limit(5).skip(10) 查询22 EXPLAIN SELECT * FROM users WHERE status="A" db.users.find({status:"A"}).explain() 更新1 UPDATE users SET status="C" WHERE age>25 db.users.update({age:{$gt:25}},{$set:{status:"C"}},{multi:true}) 更新2 UPDATE users SET age=age+3 WHERE status="A" db.users.update({status:"A"},{$inc:{age:3}},{multi:true}) 删除1 DELETE FROM users WHERE status="D" db.users.remove({status:"D"}) 删除2 DELETE FROM users db.users.remove({}) 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过客非归

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值