zoukankan      html  css  js  c++  java
  • Mongodb 3.4 + Centos6.5 配置 + mysql.sql转为csv 或 json导入和导出Mongo (64位系统)

    Centos下通过yum安装步骤如下:

          声明:相对比那些用源码安装,少了配置和新建log和data目录,这种简单粗暴,

    1,创建仓库文件,
          vi /etc/yum.repos.d/mongodb-org-3.4.repo
    2,复制下面配置,保存退出
         [mongodb-org-3.4]
         name=MongoDB Repository
       baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
       gpgcheck=1
       enabled=1
       gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
     3,yum安装
    yum install -y mongodb-org

    4,修改配置文件,别的机器也能访问,不止是 127.0.0.1
    vi /etc/mongod.conf -----》bind_ip 默认是127.0.0.1 修改为 0.0.0.0

    5,启动,停止
    service mongo start, service mongo stop

    6,日志目录位置 ---》 cat /var/log/mongodb/mongod.log
    数据库文件 ----》 cat /var/lib/mongo

    7,卸载 mongo ----> yum erase $(rpm -qa | grep mongodb-org)

    连接mongo的可视化工具我用的是--robo3T 注意的是MongoVUE不支持mongodb3版本的

    mongodb 常用命令:

      查看数据库
        > show dbs
      使用数据库
         > use database-name
       查看表
         > show tables
       查询数据
          > db.table-name.find({})
       查询条件
          > db.table-name.find({'name':'zhangsan'})
    建立索引
    > db.table-name.ensureIndex({'name':1}) 1为升序,-1为降序
    复合索引
    > db.table-name.ensureIndex{{'name':1,'age':1}} 只查询name会索引。如果只查询age不会用到索引,如果想用索引前面必须有N个索引列
    查看索引是否建立
    > db.table-name.getIndexes()
    删除索引
    > db.table-name.dropIndex({'name':1})
    管理索引,查看所有索引:
    > db.system.index.find()
    插入字段
    > db.table-name.update({query},{$set:{'status':'1'}},false,true)
    query:where条件
    false: 字段存在不插入,默认为false
    true: 只更新第一条记录,如果为true 全部更新
    查找是否存在
    > db.table-name.find({'name':{$exists:true}}) ----->查找name字段是否存在
    删除文档
    > db.table-name.remove({query})
    query:删除的条件
    修改字段名字
    > db.table-name.update({query},{$rename:{'old-name':'new-name'}},false,true)
    修改字段类型
    > 如下命令是将hscourses表中的ClassID字段从整型转换到字符串型:
    db.hscourses.find({'ClassID' : { $type : 16 }}).forEach(function(x) {x.ClassID = x.ClassID+'';db.hscourses.save(x); }) 
        >分组:mongo中group by

             db.getCollection('bigdata').aggregate([
                                    {$match:{"CtfId" : "152626198103082713"}},
                                    {$group:{_id:'$CtfId',Name:{'$addToSet':'$Name'},Address:{'$addToSet':'$Address'}}
                                    }])

             

           aggregate 为聚合:  $match 为条件类似于wherer。group为分组。_id是必填的分组项。 $addToSet 结果文档中插入值到一个数组中,但不创建副本。
    如果显示多字段必须上聚合表达式($sum,$avg,$addToSet……)

       

           截取 Mobile字段包含	的js写法          

                              db.bigdata.find({'table_type':'5','Mobile':/ /}).forEach(function(x){
                              x.Mobile=x.Mobile.substring(0,x.Mobile.length-1);//将其转为string类型
                              db.bigdata.save(x);//保存
                              });


    mongo 导入 json 或者csv 做法

    声明:4G的 .sql文件(20050144条数据)导入mongodb 总共时间为 28分钟 + 25分钟 + 15分钟
    ①,28分钟: 在linux 中 source ./.sql目录 导入数据库
    ②,25分钟: 用Navicat for MySQL 导出格式为csv 或者json
    ③,15分钟: 用mongo自带的mongoimport命令 上传csv或者json

    前2步傻瓜式操作,唯一注意的是②步:
    json格式情况下: 4G大小的.sql文件,如果用navicat转为json大小为11G,11G的json上传mongo会 ‘/a’错误,实验200MB的没有问题
    csv格式情况下: 4G大小的.sql文件,如果用navicat转为csv大小还是4G,其中csv会是乱码,不用管,直接上传mongo没有问题,
    navicat导出的时候选择一定选择 ’包含列的标题‘ 后期上传名mongdb时候可以少填写参数为列
    导入命令如下:
    json: 
                mongoimport --db  table-name  --collection table-name  --file /test.json   
         csv:
    mongoimport --db table-name  --collection table-name --type csv --headerline --ignoreBlanks  --file /test.csv  --numInsertionWorkers 4

    mongoimport --db bigdata --collection test4 --type csv --columnsHaveTypes --fields "EMail.string(),password1.string(),CtfId.string(),password2.string()" --file /home/kdjkadmin/mydb_sql/1312306.csv
    这个语句是把csv里面的int类型变为string类型。如果字符串身份证号再mongdo里面是 numberLong类型的,pymongo查numberlong类型 python2 用long()查询,python3 用int()。如果身份证中有x 只能再导入时候变为字符串类型
    导出命令如下:
          json:

                mongoexport  --db  table-name  --collection table-name  -o /test.json

          csv: 

    mongoexport  --db  table-name  --collection table-name --csv -f id,province,city -o /test.csv
    --csv 指要要导出为csv 格式,导出csv之后必须指明导出的列
    -f 指明需要导出哪些列
    -f 后面跟着字段名不能有空格。有空格话会报错(too many positional arguments)
        
    参数说明
    --db 指明使用的库, 本例中为” table-name
              --collection 指明要导出的表, 本例中为”table-name”
    --type 指明导入的类型,默认的为json
    --headerline 仅适用于导入csv,tsv格式的数据,表示文件中的第一行作为数据头
    --ignoreBlanks 忽略空白符
    --file 文件的位置
    --numInsertionWorkers 为了提高mongo的插入效率,采用mongodb推荐的(numInsertionWorkers)多线程操作。本质来说,就是将insert任务,拆分成多个线程来做。







    
    
  • 相关阅读:
    "V租房"搭建微信租房平台,让租房人发起求租需求并接收合适房源回复,提高租房效率 | 36氪
    金融街
    Jsensation | 氪加
    Polyvore
    周翔宇_百度百科
    鸵鸟心态
    新闻:型牌男装:网上订服装,如何将返修率降到5个点以下 | IT桔子
    【案例】舒邑:一个女装品牌的奇葩打法-@i黑马
    专访OPPO李紫贵:ColorOS用户过千万 软硬融合生态版图初现
    关于我们-EIBOA易博男装-互联网品质男装品牌-在线销售男士西服,衬衫,外套,西裤,领带|全场免运费,30天退换货保障
  • 原文地址:https://www.cnblogs.com/pythonSF/p/8099059.html
Copyright © 2011-2022 走看看