[精讚] [會員登入]
745

[Linux] mongodb 初步--1/3

我使用mongo 的一些大小事:安裝及基本操作

此文完整連結 http://n.sfs.tw/10606

複製連結 [Linux] mongodb 初步--1/3@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2018-11-22 16:13:02 最後編修
2017-01-13 12:19:08 By 瘦河馬
 

群組文章
[Linux] mongodb 初步--1/3  安裝及基本操作

[Linux] mongodb 初步--2/3 叢集

[Linux] mongodb 初步--3/3 權限和幫助

OS

CENTOS 5.8 Redhat Linux

一、安裝

2017.9.12更新

# vi /etc/yum.repos.d/mongodb-org-3.4.repo

[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

#  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

> db.test.save( { a: 1 } )
> db.test.find()
 
和遠端mongo連線
mongo 163.17.38.X

三、安裝 phpMoAdmin

  非必要,安裝後能讓你在網頁查詢操作

  直接下載解壓即可使用 http://www.phpmoadmin.com/

四、操作

mongodb 的db 就叫db,table叫做collection,一行row叫document,一個欄位column叫field

1. 切換資料庫

> use t001
switched to db t001

2.  顯示資料庫
> show dbs

3. 顯示資料"表",稱之為集合 collection
> show collections

4. 塞值 (集合為tb1)
> j = { name : "mongo" };
> t = { x : 3 };
> db.tb1.save(j);
> db.tb1.save(t);
顯示內容
> db.tb1.find();
顯示1行內容
> db.tb1.find().limit(1);

> db.tb1.findOne()

5. 查看目前資料庫
> db

mydb

6. 建立資料庫
> use mydb

也是用 use來建立資料庫,但在show dbs清單中你看不到,原因是裡面得有資料才行

7. 建立集合(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 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});

 

插入:

MySQL:
INSERT INOT user (`name`, `age`) values (’starlee’,25)
Mongo:
db.user.insert({'name' : 'starlee', 'age' : 25})

刪除:

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}})

註一

在修改目錄後,重新啟動出現了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/


原文 2012-05-10 16:19:54

你可能感興趣的文章

[Linux] 安裝rsync (selinux 的設定) 在selinux enforcing 的情況下安裝rsync

使用GPG檔案加解密 簡易的檔案加解密方式,可以讓你重要的資料包括文字檔加解密。

動態DNS -- dynamic DNS實作 BIND9動態DNS設定

PHP for sphinx 函式庫安裝 PECL/sphinx PHP>= 5.2.2 已經能原生支援 sphinx,可是預設的沒有裝,我們得自己裝才能用

[CentOS6] 設定 sendmail Centos6上設定sendmail,基本上sendmail會設定多半是為了寄系統信和收垃圾信(喂!!?)

[CentOS] 設定和使用quota quota 的觀念已經很老了,不過每次都會忘記所以寫下來,有需要觀念的朋友請參看鳥哥的網站吧

[Centos7] 安裝sphinx+php7 在centos7上安裝sphinx,在PHP7上運作正確

[Centos6 7] 掛載磁碟 只是掛載新磁碟

[Centos7] selinux 修改網頁連線的埠號 想把網頁改到非標準的80埠,在selinux上要如何修改?

Linux ext3 系統下刪除檔案救回全記錄 今天一個不小心,下了 rm 的指令,從此奮戰一個下午,終於把檔案救回來,以下是全記錄...

我有話要說


限制:留言最高字數1000字,超過部分會被截掉。請注意:留言不可帶有網址,會被濾掉。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

沒有非誰做不可的事,也沒有不可被取代的人 沒有非誰做不可的事,也沒有不可被取代的人

[Freebsd] 定時測試 ADSL 是否斷線並重連 中華電信 ADSL 雖有固定 ip,可是他卻會不定時「斷線」, 使用以下的 方法可以定時測試是否斷線,以及重新撥接。

一個邏輯的錯誤刪了全部檔案的經驗 今天本來想做一件很簡單的事,但卻足足浪費我多一倍的時間,再加上刪掉我全部的檔案,原因只是因為我自己的邏輯錯誤。

NETCRAFT發現你的網站及作業系統 NETCRAFT可以發現你的網站及作業系統

Smarty安裝 smarty 是著名的樣版引擎,非常的好用,用多了突然發現拿掉smarty反而不會寫php了,以下是安裝過程..