iT邦幫忙

0

[docker]啟動mongo DB與簡單操作

本章整理內容

  • 使用 docker-compose 快速啟動 mongodb
  • 簡單的工具操作與 用指令MongoDB Shell 搜尋與更新資料

MongoDB是NoSQL的資料庫,以文件儲存資料,一般資料庫開Table須定義欄位(大小、型別、名稱等),但是Collection完全不事先定義欄位,每筆document可以有不等數量的欄位。。

名詞對應:

MongoDB RDBMS 意思
db DB 資料庫
collection Table 表格
document record 一筆紀錄

1.啟動mongo docker

事先須安裝好docker與docker-compose,
這邊直接新增docker-compose.yml 貼上網路找到的內容

version: '3.1'

services:

  mongo:
    image: mongo
    ports:
      - "27017:27017"
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

在與yml黨相同目錄下啟動

➜  mongo git:(master) ✗ docker-compose up -d   
Creating network "mongo_default" with the default driver
Creating mongo_mongo_1         ... done

2.操作資料內容

以下可用透過一些網上mongo工具 ex Robo3T操作

先進行連線進入介面host: localhost, port: 27017

  • CreateDB"test",
  • 新增一筆Collection"user"
  • 新增Documanet如下(Json格式)1.
{
    "profile" : {
        "name" : "user1",
        "gender" : "F",
        "age" : 18
    }
}

新增完會自動產生唯一的objectID,透過工具也可以對資料做簡單的修改動作。

3.mongo shell

  • 一般工具都可以看到資料內容,但如果要下類似SQL的語法要改成下列的用法
  • 可以在有提供shell指令視窗的工具上下指令去做更新進階的搜尋
  • 例如mongo 3T上方就有視窗可以使用.

搜尋指令

搜尋全部

db.getCollection('user').find({})

搜尋by_id

db.getCollection('user').find({_id:ObjectId("5eaa780f3dfac43981e4412c")})

搜尋內容值

db.getCollection('user').find({"profile.name":"user1"})

搜尋範圍 數字型態

[gt大於,gte大於等於,lt小於,lte小於等於]
db.getCollection('user').find({"profile.gender":"F","profile.age":{$gt:2,$lte:18}})

搜尋範圍 字串型態

按UTF-8進行字典排序 表搜尋字母A~Z間
db.getCollection('user').find({"profile.name":{$gt:"a",$lte:"z"}})


計算總數

db.getCollection('user').find().count()

排序

依命名排序,其中 1 为升序排列,而 -1 是用于降序排列
db.getCollection('user').find({}).sort({name:1})

顯示筆數(limit)與開始(skip)

可以用他來做分頁讀取
db.getCollection('user').find({}).sort({name:1}).skip(0).limit(2)


批次更新

一般來說工具就可以做內容更新,但如果需要透過指令,

更新欄位

將性別欄位“F”全改成“woman”

db.getCollection('user').find().forEach( function(d) {
     
if(d.profile.gender=="F"){
    d.profile.gender="woman"
    db.getCollection('user').update({"profile.name":d.profile.name},d);
    print(d.profile.name+" process change done" );  
};
});

新增欄位合併內容

db.getCollection('user').find().forEach( function(d) {
d.description= d.profile.name+","+d.profile.gender;
db.getCollection('user').update({"profile.name":d.profile.name},d);
    print(d.profile.name+" process change done" );  
});

刪除欄位

db.getCollection('user').find().forEach( function(d) {
delete d.description
db.getCollection('user').update({"profile.name":d.profile.name},d);
    print(d.profile.name+" process change done" );  
});

  • 如果是要在mongo的docker環境上面下指令
    需要把指令包成js,檔案丟進去docker裡面,然後下指令
load("script/Change.js") //檔案位置
mongo 127.0.0.1:27017/test Change.js

執行結果與上述內容一樣


之後再介紹如何用 golang 程式去對 mongo CRUD 操作.(待續)


尚未有邦友留言

立即登入留言