DAY4 MongoDB 资料库与 Collection

DAY4 MongoDB 资料库与 Collection

Database

MongoDB 一个 instance 中可以有很多资料库,预设的有三个,admin, config, local。当我们连进 MongoDB 後,输入 show dbs 就可以看到这三个,这三个分别有其用处。

  • admin:
    看这个名字可以想见这个资料库很重要,对的,所有的重要资讯、重要指令都只能在这个资料库底下操作。例如要新增角色或者关闭 instance,相当於所有资料库的 administrator 一般。

    如果要建立个别资料库的使用者或角色,在各别的资料库建立即可,但如果想要跨资料库,则需要在这里建立,这样会自动继承到其他资料库。

  • config:
    此资料库主要是存放 sharding 相关的资讯。在 3.6 版後,开始存放 standalone 或 replication 的资料,也有跟 transaction 相关的资料,但无论如何是禁止去针对这个资料库进行修改或删除的,仅有查看可以。

  • local:
    用来存放这个 instance,在这台机器的档案与资讯,不会因为 replica set 的设定而把相关资料复制走,简单来说就是别人用不到的资讯。连进去就有一个 startup_log 可以查看。

建立资料库

建立资料库并不需要特别宣告,直接 use 即可,以下为范例:

test> show dbs
admin     41 kB
config   111 kB
local   73.7 kB
test> use testUsedDatabase
switched to db testUsedDatabase

直接使用 use testUsedDatabase 就会切换到当下资料库。

Collection

Collection 就相当於 RDBMS 内的资料表(table)的概念,只是它存放的是文件(document)而非固定大小、格式的资料(record),例如:

//Record1
{
    "_id": "customized_id1",
    "fieldA": "valueA"
},
//Record2
{
    "_id": "customized_id2",
    "fieldA": "valueA",
    "fieldB": 105,
    "fieldC": 3.1415
}

这样的两笔一样可以直接写入 DB 喔!

db.getCollection('test-collection').insertMany([
{
    "_id": "customized_id1",
    "fieldA": "valueA"
},
{
    "_id": "customized_id2",
    "fieldA": "valueA",
    "fieldB": 105,
    "fieldC": 3.1415
}
])

结果如图:

https://ithelp.ithome.com.tw/upload/images/20210904/20140504tKcbNGfa2b.png

建立 Collection

建立一般 Collection 不需要特别宣告,直接写入任意资料即可,以下为范例:

local> show dbs
admin     41 kB
config   111 kB
local   73.7 kB
local> use testUsedDatabase
switched to db testUsedDatabase

testUsedDatabase> show collections

testUsedDatabase> db.getCollection('autoCreatedCollection').insertOne({"field": "hi"})
{
  acknowledged: true,
  insertedId: ObjectId("612cf44a031915cb2af17374")
}

testUsedDatabase> show collections
autoCreatedCollection

直接 insert 资料就会建立你指定的 collection。

Capped collection

MongoDB 另一个强大的 collection 类别,叫做 capped collection。这种类型有几个特点:

  1. 必须先宣告才能使用
  2. 宣告时必须指定大小,且不允许更改
  3. 里面的资料无法单独修改,要,就只能全部删除重来
  4. 无需 Index,但速度堪比有加上 index 的一般 collection
  5. 因为固定大小的缘故,当资料笔数满时,会优先覆盖最早写入的资料
  • 确认是否为 capped collection
db.getCollection('test-collection').isCapped()
  • 建立 capped collection,size 单位为 byte; max 是最多几笔资料的意思
db.createCollection( "test-capped.collection", { capped:true, size:1024*1024 , max:100 } )

Views

MongoDB 的 views 很像是某些老牌资料库的简易版,我在这边不打算讲得太详细,因为个人认为在大部分情况下比较少需要使用到。可以想像它就是一个 method,可以自几定义参数,经过查询後返回结果。

特色

  • 只能查询
  • 可以使用 aggregation pipeline
  • 可以使用 $merge 产生结果到别的资料库或 collection
  • 实时查询,并不会建立或快取任何结果,因此没有效能上提升

使用场景

  • 简化你的查询语法
  • 提供给较少权限或者特定权限的使用者查询

关於 MongoDB Views 我暂时想不到别的了,如果很落实权限设计,应该也不会让特定使用者直接查到资料库才是。


本系列文章会同步发表於我个人的部落格 Pie Note


<<:  [Day3]C# 鸡础观念- 核心的数据成员~变数(一)

>>:  Material UI in React [Day 3] Layout (Grid & ThemeProvider)

[day27]Vue实作-即时交易查询

上两篇进行了历史交易查询实作,但当日缴费查询则就要从订单直接查询着手 这整个流程有点乱,我还需要想一...

继续建构专案

继续建构专案 ...

【C#】Creational Patterns Builder Mode

The Builder design pattern separates the construct...

(Hard) 32. Longest Valid Parentheses

Given a string containing just the characters '(' ...

Linux 更改档案或目录的权限

更改档案或目录的权限,语法如下: chmod -R 755 /usr/local/apache-to...