mongodb macos 下的安裝和使用

weixin_34290000發表於2018-06-14

一、安裝

https://www.mongodb.com/download-center?jmp=nav#community
官網下載自己需要的版本的安裝包,當然也可以使用系統自帶的包管理工具進行安裝,這裡就不多介紹了

3352238-c0c96b1613a903b7.png
image.png

下載完成後,將檔案解壓到自己想要的目錄,我是放在了/usr/local/ 目錄下,將mongodb的bin目錄配置到環境變數中,以便訪問。根目錄下面建立data/db 目錄,用於存放mongodb資料,並且給該目錄設定許可權,否則訪問會報錯

sudo mkdir -p /data/db
sudo chown -R 當前登入的使用者名稱  /data

參考:http://cacaorick.logdown.com/posts/1207679

二、啟動服務

開啟終端,執行

➜  ~ mongod
2018-06-12T17:46:12.934+0800 I CONTROL  [initandlisten] MongoDB starting : pid=15495 port=27017 dbpath=/data/db 64-bit host=lizandeMBP
2018-06-12T17:46:12.934+0800 I CONTROL  [initandlisten] db version v3.6.5
2018-06-12T17:46:12.934+0800 I CONTROL  [initandlisten] git version: a20ecd3e3a174162052ff99913bc2ca9a839d618
2018-06-12T17:46:12.934+0800 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2o  27 Mar 2018
2018-06-12T17:46:12.934+0800 I CONTROL  [initandlisten] allocator: system
2018-06-12T17:46:12.934+0800 I CONTROL  [initandlisten] modules: none
2018-06-12T17:46:12.934+0800 I CONTROL  [initandlisten] build environment:
2018-06-12T17:46:12.934+0800 I CONTROL  [initandlisten]     distarch: x86_64
2018-06-12T17:46:12.934+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2018-06-12T17:46:12.934+0800 I CONTROL  [initandlisten] options: {}
2018-06-12T17:46:12.937+0800 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=3584M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),cache_cursors=false,log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),statistics_log=(wait=0),verbose=(recovery_progress)...

也可以使用--dbpath自定義資料庫的路徑,

mongod --dbpath 自定義路徑/db

開啟另一個終端,執行mongo執行MongoDB

➜  ~ mongo
MongoDB shell version v3.6.5
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.5
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
Server has startup warnings:
2018-06-12T17:46:14.724+0800 I CONTROL  [initandlisten]
2018-06-12T17:46:14.724+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2018-06-12T17:46:14.724+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2018-06-12T17:46:14.724+0800 I CONTROL  [initandlisten]
2018-06-12T17:46:14.724+0800 I CONTROL  [initandlisten] ** WARNING: This server is bound to localhost.
2018-06-12T17:46:14.724+0800 I CONTROL  [initandlisten] **          Remote systems will be unable to connect to this server.
2018-06-12T17:46:14.724+0800 I CONTROL  [initandlisten] **          Start the server with --bind_ip <address> to specify which IP
2018-06-12T17:46:14.724+0800 I CONTROL  [initandlisten] **          addresses it should serve responses from, or with --bind_ip_all to
2018-06-12T17:46:14.724+0800 I CONTROL  [initandlisten] **          bind to all interfaces. If this behavior is desired, start the
2018-06-12T17:46:14.724+0800 I CONTROL  [initandlisten] **          server with --bind_ip 127.0.0.1 to disable this warning.
2018-06-12T17:46:14.724+0800 I CONTROL  [initandlisten]

如果想停止程式可執行ctrl+c

三、mongodb的基本概念

每個框架都有自己的語法或者API或者單獨的概念性的東西,使用之前要大概瞭解其核心概念,在mongodb中基本的概念是文件、集合、資料庫


3352238-8241bb1d8c7d6203.png
image.png

資料庫

一個mongodb中可以建立多個資料庫,每一個都有自己的集合和許可權,不同的資料庫也放置在不同的檔案中

1、show dbs 可以顯示當前所有的資料庫列表
db 可以檢視當前資料庫物件或集合
use 資料庫名稱 連線到指定資料庫

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> db
test
> use test
switched to db test
>

有一些資料庫名是保留的,可以直接訪問這些有特殊作用的資料庫。
admin: 從許可權的角度來看,這是"root"資料庫。要是將一個使用者新增到這個資料庫,這個使用者自動繼承所有資料庫的許可權。一些特定的伺服器端命令也只能從這個資料庫執行,比如列出所有的資料庫或者關閉伺服器。
local: 這個資料永遠不會被複制,可以用來儲存限於本地單臺伺服器的任意集合
config: 當Mongo用於分片設定時,config資料庫在內部使用,用於儲存分片的相關資訊。

文件

mongodb是以文件形式儲存資料的,文件是一組鍵值對,如下:

{"site":"www.runoob.com", "name":"菜鳥教程"}
3352238-ee8b20b33b096078.png
image.png

需要注意的是:
1. 文件中的鍵/值對是有序的。
2. 文件中的值不僅可以是在雙引號裡面的字串,還可以是其他幾種資料型別(甚至可以是整個嵌入的文件)。
3. MongoDB區分型別和大小寫。
4. MongoDB的文件不能有重複的鍵。
5. 文件的鍵是字串。除了少數例外情況,鍵可以使用任意UTF-8字元。

文件鍵命名規範:

  • 鍵不能含有\0 (空字元)。這個字元用來表示鍵的結尾。
  • .和$有特別的意義,只有在特定環境下才能使用。
  • 以下劃線"_"開頭的鍵是保留的(不是嚴格要求的)。

集合

集合對應的是sql中的資料庫表概念,集合沒有固定的結構,可以儲存不同型別的資料

四、資料庫連線

  • 本地資料庫連線
mongo
  • 遠端連線為
 mongo 遠端主機IP或dns:mongo資料庫埠號/資料庫名 -u 使用者名稱 -p 
password 

如下:
連線指定埠號的資料庫

mongo 192.168.1.100:27017

連線到指定資料庫

mongo 192.168.1.100:27017/test

連線到指定使用者名稱和密碼的資料庫

mongo 192.168.1.100:27017/test -u user -p password
➜  ~ mongo 192.168.1.100
MongoDB shell version v3.6.5
connecting to: mongodb://192.168.1.100:27017/test
MongoDB server version: 3.6.5
Server has startup warnings:
2018-05-31T09:13:43.315+0000 I CONTROL  [initandlisten]
2018-05-31T09:13:43.315+0000 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2018-05-31T09:13:43.315+0000 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2018-05-31T09:13:43.315+0000 I CONTROL  [initandlisten]
2018-05-31T09:13:43.316+0000 I CONTROL  [initandlisten]
2018-05-31T09:13:43.316+0000 I CONTROL  [initandlisten] ** WARNING: You are running on a NUMA machine.
2018-05-31T09:13:43.316+0000 I CONTROL  [initandlisten] **          We suggest launching mongod like this to avoid performance problems:
2018-05-31T09:13:43.316+0000 I CONTROL  [initandlisten] **              numactl --interleave=all mongod [other options]
2018-05-31T09:13:43.316+0000 I CONTROL  [initandlisten]
2018-05-31T09:13:43.316+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-05-31T09:13:43.316+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-05-31T09:13:43.316+0000 I CONTROL  [initandlisten]
2018-05-31T09:13:43.316+0000 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-05-31T09:13:43.316+0000 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-05-31T09:13:43.317+0000 I CONTROL  [initandlisten]
> show dbs
admin   0.000GB
test    0.000GB
config  0.000GB
local   0.000GB
> use test
switched to db boss

五、資料庫的操作

建立資料庫

MongoDB 建立資料庫的語法格式如下:

use DATABASE_NAME

如果資料庫不存在,則建立資料庫,否則切換到指定資料庫。

向資料庫中插入一條資料

> db.test.insert({"name":"lz","age":15,"size":"160"})
WriteResult({ "nInserted" : 1 })

刪除資料庫

首先切換到要執行操作的資料庫

> use test
switched to db test
> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }

刪除集合

db.collection.drop()

示例

> show tables
test
> use test
switched to db test
> show tables
test
> db.test.drop()
true
> show tables
>

建立集合

MongoDB 中使用 createCollection() 方法來建立集合。

db.createCollection(name,options)

引數說明:

  • name:要建立的集合名稱
  • options: 可選,用來指定記憶體大小和索引資訊的選項


    3352238-6005a1b925c1b824.png
    image.png

    示例:

> use test
switched to db test
> db.createCollection("user")
{ "ok" : 1 }
> show tables
user
> show collections
user
> db.createCollection("bank",{capped:true,size:6142800,max:1000})
{ "ok" : 1 }
> show collections
bank
user
>

也可以不建立,當你插入文件時,如果指定的集合不存在,MongoDB 會自動建立集合。

> db.bank_info.insert({"name":"工商銀行","code":10021})
WriteResult({ "nInserted" : 1 })
> show collections
bank
bank_info
user
>

刪除集合

db.collection.drop()

示例:

> db.bank_info.drop()
true
> show collections
bank
user
>

插入文件

MongoDB 使用 insert() 或 save() 方法向集合中插入文件,語法如下:

db. COLLECTION_NAME.insert(document)
> db.lesson.insert({title: 'MongoDB 教程',
...     description: 'MongoDB 是一個 Nosql 資料庫',
...     by: '簡書',
...     url: 'http://www.jianshu.com',
...     tags: ['mongodb', 'database', 'NoSQL'],
... })
WriteResult({ "nInserted" : 1 })
> db.lesson.find()
{ "_id" : ObjectId("5b20e16776322c7daa3fb2e4"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 資料庫", "by" : "簡書", "url" : "http://www.jianshu.com", "tags" : [ "mongodb", "database", "NoSQL" ] }
>

插入資料到未建立的集合,會預設建立並插入資料,並自動生成_id 主鍵

刪除文件

MongoDB remove()函式是用來移除集合中的資料。在執行remove()函式前先執行find()命令來判斷執行的條件是否正確是一個比較好的習慣。

db.COLLECTION_NAME.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

引數說明:

  • query :(可選)刪除的文件的條件。
  • justOne : (可選)如果設為 true 或 1,則只刪除一個文件。
  • writeConcern :(可選)丟擲異常的級別。
> db.lesson.find()
{ "_id" : ObjectId("5b20e16776322c7daa3fb2e4"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 資料庫", "by" : "簡書", "url" : "http://www.jianshu.com", "tags" : [ "mongodb", "database", "NoSQL" ] }
{ "_id" : ObjectId("5b20e69f76322c7daa3fb2e5"), "title" : "sql 教程", "description" : "mysql 是一個 sql 資料庫", "by" : "簡書", "url" : "http://www.jianshu.com", "tags" : [ "mysql", "database", "SQL" ] }
> db.lesson.remove({"title":"sql 教程"})
WriteResult({ "nRemoved" : 1 })
> db.lesson.find()
{ "_id" : ObjectId("5b20e16776322c7daa3fb2e4"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 資料庫", "by" : "簡書", "url" : "http://www.jianshu.com", "tags" : [ "mongodb", "database", "NoSQL" ] }
>

如果想要刪除全部文件

db.COLLECTION_NAME.remove({})

更新文件

update() 方法用於更新已存在的文件。語法格式如下:

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

引數說明:

  • query : update的查詢條件,類似sql update查詢內where後面的。
  • update : update的物件和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set後面的
  • upsert : 可選,這個引數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,預設是false,不插入。
  • multi : 可選,mongodb 預設是false,只更新找到的第一條記錄,如果這個引數為true,就把按條件查出來多條記錄全部更新。
  • writeConcern :可選,丟擲異常的級別。
> db.lesson.update({"title":"MongoDB 教程"},{$set:{"title":"MongoDB"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.lesson.find()
{ "_id" : ObjectId("5b20e16776322c7daa3fb2e4"), "title" : "MongoDB", "description" : "MongoDB 是一個 Nosql 資料庫", "by" : "簡書", "url" : "http://www.jianshu.com", "tags" : [ "mongodb", "database", "NoSQL" ] }
>

檢視文件

MongoDB 查詢文件使用 find() 方法。

> db.COLLECTION_NAME.find()
> db.lesson.find()
{ "_id" : ObjectId("5b20e16776322c7daa3fb2e4"), "title" : "MongoDB", "description" : "MongoDB 是一個 Nosql 資料庫", "by" : "簡書", "url" : "http://www.jianshu.com", "tags" : [ "mongodb", "database", "NoSQL" ] }
>

如果想要以易讀的方式來讀取資料,可以使用pretty()的方法

> db.lesson.find().pretty()
{
    "_id" : ObjectId("5b20e16776322c7daa3fb2e4"),
    "title" : "MongoDB",
    "description" : "MongoDB 是一個 Nosql 資料庫",
    "by" : "簡書",
    "url" : "http://www.jianshu.com",
    "tags" : [
        "mongodb",
        "database",
        "NoSQL"
    ]
}

自此 mongodb 安裝到基本的資料庫操作完成。

相關文章