---
# System prepended metadata

title: MongoDB
tags: [NoSql]

---

# MongoDB
https://www.youtube.com/watch?v=-bt_y4Loofg

https://tw.alphacamp.co/blog/mysql-and-mongodb-comparison

忘了可以進去看 他下面有備忘錄連結
https://www.youtube.com/watch?v=ofme2o29ngU
## 介紹
no-sql

他沒有資料表那樣
原因是當你沒有這個collection會自動創造

他沒有甚麼子查詢
因為他可以嵌套

## shell(要額外安裝)

你可以看到你輸入**mongo**他會顯示test
![](https://i.imgur.com/pCLLUMN.png)
因為預設的資料庫就叫test(實際不存在 除非你有建立資料)
當你use某一個就資料庫就不會有這個了

mongo是進入sell可以操作db
但當你要離開要用exit
## show dbs
![](https://i.imgur.com/VlHPaax.png)
會顯示
admin
config
local
三個資料庫
## 使用資料庫
use 某一個
ex use admin

## 建立資料庫

use 不存在的名稱
但其實沒有真的建立
記得前面說的嗎
就像test一樣
只有當你裡面有資料才會建立
不信你用show dbs看看

## 刪除資料庫

db.dropDatabase()
這邊很多寫法都跟js很像
因為他底層就是node

## collection
這等於MySql的資料表

## show collections
查看全部的資料表那種感覺

## collection
### 放入collection
db.users.insertOne({ name:"john" })

基本上都是db開頭 因為你在進來資料庫了
第二是集合 你可以當成資料表 一樣加s
第三語法你看dropDatabase一樣
這是function 駝峰方式
前面是sql動作
後面是對誰
function參數是 json格式

![](https://i.imgur.com/QxqFfrd.png)
第一個是true代表有成功
第二是quene 的id

### 當然可以多個array
用 db.users.insertMany

### find() 這等於all抓取全部
![](https://i.imgur.com/4wa3bTT.png)

後面可以做sort liment之類的
就是collection能做的那種感覺

#### find.sort排序

![](https://i.imgur.com/cdWrnWu.png)
傳入物件
key是要搜尋的
value 有 1跟 -1(相反)

### where 
find裡面除了物件就是搜尋
1.-1是排序
![](https://i.imgur.com/euvgZDS.png)


### where 限定返回的欄位
![](https://i.imgur.com/en51CLT.png)

要返回的欄位寫 1 
不要返回的欄位寫0
對了如果是id 要加上_喔

#### where複雜查詢

##### $eq 找相符合的
![](https://i.imgur.com/IQtwYl4.png)
找相符合的

##### $ne 找不符合的
![](https://i.imgur.com/loTj8WX.png)

##### $gt 大於 
![](https://i.imgur.com/Gyt3MRM.png)
##### $in whereIn
![](https://i.imgur.com/EnLTdTZ.png)

##### $nit notWhereIn
![](https://i.imgur.com/iFW0JBo.png)


##### $gte 大於等於


##### $exist 
![](https://i.imgur.com/WtWmywW.png)
注意null也會返回喔

##### $lte 小於
![](https://i.imgur.com/owfFVGm.png)

##### $or 或
![](https://i.imgur.com/UHDW9oA.png)


##### $expr 比較同一個資料的兩個欄位
`$expr:{$ge:['$debt','$balance'] }`
記得如果是欄位 要加上$字號
![](https://i.imgur.com/OEWWyDk.png)

### countDocuments 數量
![](https://i.imgur.com/tfOhAqE.png)

### update
跟find一樣 但要改變的結果要加上$set
![](https://i.imgur.com/J8EtzIp.png)

#### $inc 流水號那個 自動增加數字
![](https://i.imgur.com/CVma0LT.png)

#### $rename 重新命名
![](https://i.imgur.com/ynrQmZY.png)

#### $unset  刪除欄位
![](https://i.imgur.com/VyN0mvr.png)
#### $push 如果屬性是array可以增加
![](https://i.imgur.com/1Kef25U.png)
#### $pull 跟 push相反 是把東西拉出來 等於刪掉
![](https://i.imgur.com/geGVXBL.png)


### updateMany 大量更新
![](https://i.imgur.com/RxPxmlP.png)


### deleteOne
![](https://i.imgur.com/ZuhXEio.png)


### replaceOne 替換一個
![](https://i.imgur.com/EgZoaUI.png)
注意這替換是整個object喔
基本用不到
###### tags: `NoSql`