Mongodb 3.4 + Centos6.5 配置 + mysql.sql轉爲csv 或 json導入和導出Mongo (64位系統)

Centos下經過yum安裝步驟以下:python

      聲明:相對比那些用源碼安裝,少了配置和新建log和data目錄,這種簡單粗暴,linux

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 經常使用命令:sql

  查看數據庫
    > 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'}}
                                }])mongodb

         

       aggregate 爲聚合:  $match 爲條件相似於wherer。group爲分組。_id是必填的分組項。 $addToSet 結果文檔中插入值到一個數組中,但不建立副本。
若是顯示多字段必須上聚合表達式($sum,$avg,$addToSet……)

   

 截取 Mobile字段包含\t的js寫法          

                          db.bigdata.find({'table_type':'5','Mobile':/\t/}).forEach(function(x){
                          x.Mobile=x.Mobile.substring(0,x.Mobile.length-1);//將其轉爲string類型
                          db.bigdata.save(x);//保存
                          });數據庫


 

 

 

 

mongo 導入 json 或者csv 作法json

聲明: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任務,拆分紅多個線程來作。
相關文章
相關標籤/搜索