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({})