zoukankan      html  css  js  c++  java
  • 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(/
    /gi, "");//Js正则去掉换行字符
      r=r.replace(/
    /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({})
    

     

  • 相关阅读:
    shell中的for循环
    tty相关
    udev规则
    find中perm参数
    日志级别的选择:Debug、Info、Warn、Error还是Fatal
    云计算、云存储、大数据
    JSON数据解析(python3.4)
    38、友盟统计
    37、iamgeview 图层叠加
    36、imageview的坑
  • 原文地址:https://www.cnblogs.com/tranw/p/6037455.html
Copyright © 2011-2022 走看看