自動目錄
群組文章
[Linux] mongodb 初步--1/3 安裝及基本操作[Linux] mongodb 初步--3/3 權限和幫助
OS
CENTOS 5.8 Redhat Linux
一、安裝
2017.9.12更新
# vi /etc/yum.repos.d/mongodb-org-3.4.repo
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
# yum install -y mongodb-org
下面為過去的方法
建立 /etc/yum.repos.d/10gen.repo 檔[3],內容為
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=1
完畢後,請執行安裝:
# yum install mongo-10gen mongo-10gen-server
二、設定和啟動
編輯 /etc/mongod.conf,這個檔會在用yum安裝完後,自動產生,如果是手動安裝則必須自行建立,主要內容
# mongodb 預設port,記得如果是遠端連線的話防火牆要開
port = 27017
# 預設存放目錄,由yum安裝自動會產生,否則請自建此目錄[註一]
dbpath=/var/lib/mongo
啟動
service mongod start
停止
service mongod stop
重啟
service mongod restart
設定開機啟動
chkconfig mongod on
測試和執行
mongo
三、安裝 phpMoAdmin
非必要,安裝後能讓你在網頁查詢操作
直接下載解壓即可使用 http://www.phpmoadmin.com/
四、操作
mongodb 的db 就叫db,table叫做集合collection,一行row叫文件document,一個欄位column叫範圍field
db
- collection
-- document
--- field
1. 切換資料庫
> use t001
switched to db t001
2. 顯示資料庫
> show dbs
3. 顯示資料"表",稱之為集合 collection
> show collections
4. 查看目前資料庫
> db
mydb
5. 建立資料庫
> use mydb
也是用 use來建立資料庫,但在show dbs清單中你看不到,原因是裡面得有資料才行
6. 建立集合(collection)
> db.createCollection("mycollection")
五、對照指令with mysql [1]
查詢
MySQL:
SELECT * FROM user
Mongo:
db.user.find()
MySQL:
SELECT * FROM user WHERE name = ’starlee’
Mongo:
db.user.find({‘name’ : ’starlee’})
MySQL:
SELECT COUNT(*) FROM user WHERE `name` = ’starlee’
Mongo:
db.user.find({‘name’ : ’starlee’}).count()
MySQL:
SELECT * FROM user limit 10,20
Mongo:
db.user.find().skip(10).limit(20)
MySQL:
SELECT * FROM tb1 limit 1
Mongo:
db.tb1.find().limit(1)
db.tb1.findOne()
MySQL:
SELECT * FROM user WHERE `age` IN (25, 35,45)
Mongo:
db.user.find({‘age’ : {$in : [25, 35, 45]}})
MySQL:
SELECT * FROM user ORDER BY age DESC
Mongo:
db.user.find().sort({‘age’ : -1})
MySQL:
SELECT DISTINCT(name) FROM user WHERE age > 20
Mongo:
db.user.distinct(‘name’, {‘age’: {$gt : 20}})
MySQL:
SELECT name, sum(marks) FROM user GROUP BY name
Mongo:
db.user.group({
key : {‘name’ : true},
cond: {‘name’ : ‘foo’},
reduce: function(obj,prev) { prev.msum += obj.marks; },
initial: {msum : 0}
});
MySQL:
SELECT name FROM user WHERE age < 20
Mongo:
db.user.find(‘this.age < 20′, {name : 1})
MySQL:
SELECT name, address FROM user WHERE age > 18
Mongo:
db.user.find( { age:{ $gt,18 }}, { name:1, address: 1})
範例:只顯示 field, log 項目(欄位)的資料
> db.mystore.find({},{field:1, log:1});
顯示某collection的筆數:
> db.getCollection('collectionname').find({}).count()
插入
MySQL:
INSERT INOT user (`name`, `age`) values (’starlee’,25)
Mongo:
db.user.insert({'name' : 'starlee', 'age' : 25})
> j = { name : "mongo" };
> t = { x : 3 };
> db.tb1.save(j);
> db.tb1.save(t);
刪除
MySQL:
DELETE * FROM user
Mongo:
db.user.remove({})
MySQL:
DELETE FROM user WHERE age < 30
Mongo:
db.user.remove({‘age’ : {$lt : 30}})
上面的比較變數還有:
- $gt : >
- $gte : >=
- $lt : <
- $lte : <=
- $ne : !=
範例:刪除id為5bf640ee7e48053c4c9f2295的記錄
db.systemstore.remove({"_id":ObjectId("5bf640ee7e48053c4c9f2295")});
更新:
MySQL:
UPDATE user SET `age` = 36 WHERE `name` = ’starlee’
Mongo:
db.user.update({‘name’ : ’starlee’}, {$set : {‘age’ : 36}})
MySQL:
UPDATE user SET `age` = `age` + 3 WHERE `name` = ’starlee’
Mongo:
db.user.update({‘name’ : ’starlee’}, {$inc : {‘age’ : 3}})
範例:陣列欄位加入一筆記錄
> db.systemstore.find();
{ "_id" : ObjectId("5ae0b3c4f0382232e0e65dd7"), "manager" : [ "wang" ] }
> db.mystore.update({"_id":ObjectId("5ae0b3c4f0382232e0e65dd7")},{$push:{manager:"zhang"}})
結果:
{ "_id" : ObjectId("5ae0b3c4f0382232e0e65dd7"), "manager" : [ "wang", "zhang" ] }
範例:陣列欄位刪除一筆記錄
> db.mystore.update({"_id":ObjectId("5ae0b3c4f0382232e0e65dd7")},{$pull:{manager:"zhang"}})
範例:加入一個項目 pageType,如果項目已存在則覆蓋該欄位
> db.mystore.update({"_id":ObjectId("5b07c7a0d00906d2ac6fa94e")},{$set:{"pageType":"VIDEO"}})
範例:移除一個項目 pageType
> db.mystore.update({"_id":ObjectId("5b07c7a0d00906d2ac6fa94e")},{$unset:{"pageType":1}})
六、刪除資料庫和集合
刪除db的話,使用 db.dropDatabase() 函數,但是你沒辦法代入值,你得先使用該資料庫
admin 0.000GB
db_name 0.004GB
local 0.000GB
> use db_name; <== 使用要移除的資料庫
switched to db db_name
> db.dropDatabase(); <== 移除
{ "dropped" : "db_name", "ok" : 1 }
> show dbs;
admin 0.000GB ]
local 0.000GB ] ==> db_name 已經不見了。
刪除前要確定是否在正確的資料庫中可用 db.getName() 來查詢
db_name
要刪除一個collection使用 db.集合名稱.drop()
idmappingstore
tsrelationstore
workerstore
> db.workerstore.drop() <== 移除workerstore
true
> show collections;
idmappingstore ]
tsrelationstore ] ==> workerstore已經不見了。
* 刪除無法復原,請小心操作
七、複製 collection
參考 [6] 的作法
db.<collection_name>.find().forEach(function(d){ db.getSiblingDB('<new_database>')['<collection_name>'].insert(d); });
範例
> db.tsrelationstore.find().forEach(function(d){ db.getSiblingDB('store')['tsrelationstore'].insert(d); });
八、備份
使用 mongodump 來備份
其中/root/mongobk/backup 是備份目的
備註
在修改目錄後,重新啟動出現了Permission denied 的錯誤:
[initandlisten] exception in initAndListen std::exception: boost::filesystem::status: Permission denied: "/home/path/to", terminating
嘗試了很多次無法解決,似乎官網上的說明並不清楚,也無法找到有效的解決方法,只好使出那一爛招:關掉selinux
# setenforce 0
修改全域的設定為permissive
# vi /etc/selinux/config
SELINUX=permissive
參考資料
[1] 从MySQL到MongoDB http://blog.nosqlfan.com/html/287.html
[2] mongodb tutorial http://www.mongodb.org/display/DOCS/Tutorial#Tutorial-GettingADatabaseConnection
[3] 官網安裝說明 http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/
[4] https://beginnersbook.com/2017/09/mongodb-drop-database/
[5] https://docs.mongodb.com/manual/reference/method/db.collection.drop/
[6]
原文 2012-05-10 16:19:54