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:
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任務,拆分紅多個線程來作。