# Mongo DB
---
## Introduction
- A NoSQL DataBase developed by 10gen
- MongoDB is Document Database
- storing data in documents
- no predefined schema
- every data can be different in content
- simplify the process loading an record object into database
Note:
本身沒有 Schema,所以在架構上很好調整
文件資料庫[b]與傳統的關聯式資料庫差異顯著。關聯式資料庫通常將資料儲存在相互獨立的表中,這些表由程式開發者定義,一個單一的物件可能散布在若干表中
對於一個給定物件,文件資料庫將其所有資訊儲存在資料庫內某個單一實體中,並且儲存的每一個物件可以不同於任一其它物件
簡化了將物件裝載入資料庫的過程
沒有在資料和模式(schema)之間的分離
---
## Documents
documents are in key-value format, like JSON
```json
{
"FirstName": "Bob",
"Address": "5 Oak St.",
"Hobby": "sailing"
}
```
or can be transform from XML or others
```xml
<contact>
<firstname>Bob</firstname>
<lastname>Smith</lastname>
<address>
<type>Home</type>
<street1>123 Back St.</street1>
</address>
</contact>
```
Note:
一個document的結構非常簡單,基本結構就是一個key name,配一個key value。{ key1:value1 , key2:value2 , ……………………….. keyN:valueN }
---
## Terms and structure diff
|MongoDB|RDBMS|
|:----:|:----:|
|collection|Table|
|document|record(row)|
|field|column|
Note:
Relational Database Management System
一般資料庫開Table必須定義欄位(大小、型別、名稱等),但是Collection完全不須要,也因為不須事先定義欄位,每筆document可以有不等數量的欄位,而存在同一個collection內
---
### Start MongoDB
```bash
>service mongod start
>mongo
```
### Create database
```bash
> use demoDB ##create&switch
> db.createCollection("contacts") ##like a table
>show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
demoDB 0.000GB
> show collections
contacts
```
Note:
11.特殊db
a.admin:這是一個相當於”root”的db,凡加入的使用者將自動取得MongoDB的administrator權限。在 Security 部分會提到。
b.local:凡隸屬其中的 collections,不會被同步到其他叢集電腦上,只會存在單機裡。在 Replication 會提到。
c.config:使用在分片技術中
---
### Drop DB/collection
```bash
> db.contacts.drop()
> db.dropDatabase()
```
### Insert
```bash
> db.contacts.insert([
{first_name:"A",last_name:"aa"},{first_name:"B",last_name:"bb"}]
)
> db.contacts.find().pretty()
{
"_id" : ObjectId("5d771f9ee31f278fd05d80bf"),
"first_name" : "A",
"last_name" : "aa"
}
{
"_id" : ObjectId("5d771f9ee31f278fd05d80c0"),
"first_name" : "B",
"last_name" : "bb"
}
```
---
### Update
```bash
> db.contacts.update({first_name:"A"},{$set:{age:15}})
> db.contacts.update({first_name:"A"},{$inc:{age:5}})
> db.contacts.update({first_name:"A"},{$unset:{age:1}})
> db.contacts.update({first_name:"C"},{first_name:"C",last_name:"cc"},{upsert:true})
> db.contacts.update({first_name:"A"},{$rename:{"age":"howold"}})
> db.contacts.remove({first_name:"A"},{justOne:true})
```
---
### Find
```bash
> db.contacts.find({first_name:"A"})
> db.contacts.find({$or:[{first_name:"dfdf"},{first_name:"fdf"}]})
> db.contacts.find({$and:[{first_name:"dfdf"},{first_name:"fdf"}]})
> db.contacts.find({age:{$gt:40}})
> db.contacts.find().sort({last_name:1}) #ascend
> db.contacts.find().sort({last_name:-1}) #descend
> db.contacts.find({first_name:{$regex: /A/}})
```
{"metaMigratedAt":"2023-06-14T23:56:21.547Z","metaMigratedFrom":"YAML","title":"Mongo DB","breaks":true,"contributors":"[{\"id\":\"41e09dc8-8069-4fe7-b757-8c69ca0fa8c5\",\"add\":7067,\"del\":4146}]"}