數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。javascript
MongoDB是一個基於分佈式文件存儲的數據庫,由C++語言編寫,旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB是一個高性能,開源,無模式的文檔型數據庫,官方給本身的定義是Key-value存儲(高性能和高擴展)和傳統RDBMS(豐富的查詢和功能)之間的一座橋樑。css
MongoDB中保存的數據格式爲BSON,如:html
{ name: "sue", age: 26, status: "A", groups: [ "news", "sports" ] }
MongoDB中數據的基本單元稱爲文檔(Document
),它是MongoDB的核心概念,由多個鍵極其關聯的值有序的放置在一塊兒組成,數據庫中它對應於關係型數據庫的行。 數據在MongoDB中以BSON
(Binary-JSON
)文檔的格式存儲在磁盤上。 BSON(Binary Serialized Document Format)是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON,BSON和JSON同樣,支持內嵌的文檔對象和數組對象,可是BSON有JSON沒有的一些數據類型,如Date
和BinData
類型。 BSON的優勢是靈活性高,但它的缺點是空間利用率不是很理想。 BSON有三個特色:輕量性、可遍歷性、高效性。java
use
命令能夠用來建立一個新的數據庫,也能夠切換到一個已經存在的數據庫:node
use DATABASE_NAME
若是想查看當前全部數據庫的列表,可使用命令:jquery
show dbs
若是想刪除當前所使用的數據庫,可使用命令:數據庫
db.dropDatabase()
可使用createCollection
方法來建立集合。express
語法json
db.createCollection(name, options)
參數說明數組
| 參數 | 類型 | 描述 | | --- | --- | --- | | Name
| String | 要建立的集合名稱 | | Options
(可選) | Document | 指定有關內存大小和索引選項 |
Options
可使用的選項:
| 字段 | 類型 | 描述 | | --- | --- | --- | | capped(可選) | Boolean | 若是爲true
,則啓用封頂集合。封頂集合是固定大小的集合,會自動覆蓋最先的條目,當它達到其最大大小。若是指定true
,則須要也指定尺寸參數。 | | autoIndexID(可選) | Boolean | 若是爲true
,自動建立索引_id
字段的默認值是false
。 | | size(可選) | Number | 指定最大大小字節封頂集合。若是封頂若是是 true
,那麼你還須要指定這個字段。 | | max(可選) | Number | 指定封頂集合容許在文件的最大數量。 |
若是要刪除掉某個集合,那麼可使用下面的命令:
javascript db.collection.drop()
在數據庫中,數據插入是最基本的操做,在MongoDB使用db.collection.insert(document)
語句來插入文檔。
document是文檔數據,collection是存放文檔數據的集合。 例如:全部用戶的信息存放在users集合中,每一個用戶的信息爲一個user文檔,插入數據:
db.users.insert(user);
*注:若是user集合不存在,那麼此時會自動建立user這個集合
insert語句不但能夠插入單個文檔,還能夠一次性插入多個文檔。 插入多個文檔時,insert命令的參數爲一個數組,數組元素爲BSON格式的文檔。 多個文檔能夠放在一個數組內,一次插入多條數據,例如:
db.users.insert([{name:"tommy"},{name:"xiaoming"}])
文檔批量插入很是方便,可是使用批量插入時也有一些問題須要注意,由於BSON格式的限制,一次插入的數據量不能超過16M,在一個insert命令中插入多條數據時,MongoDB不保證徹底成功或徹底失敗。
在MongoDB中,查詢指向特定的文檔集合,查詢設定條件,指明MongoDB須要返回的文檔;查詢也能夠包含一個投影,指定返回的字段。
在關係型數據庫中,投影指的是對列的篩選,相似的,在MongoDB中,投影指的是對出如今結果集中的對象屬性的篩選。
MongoDB中查詢檢索數據時使用find
命令,使用方法以下:
語法:
db.collection.find(criteria,projection);
參數說明:
criteria
– 查詢條件,文檔類型,可選。
projection
– 返回的字段,文檔類型,可選,若需返回全部字段,則忽略此參數。
find命令兩個可選參數,criteria爲查詢條件,projection爲返回的字段,若是不傳入條件數據庫會返回該集合的全部文檔。
update
命令能夠更新指定文檔的特定字段值,也能夠替換整個文檔,若是更新操做會增長文檔大小,MongoDB將從新分配空間並從新定位。
語法:
db.collection.update(query,update,{upsert:boolean,multi:boolean});
參數:
query
- 查詢條件,文檔,和find中的查詢條件寫法一致。 update
- 修改內容,文檔。
upsert
(可選) - 若是值爲true
,那麼當集合中沒有匹配文檔時,建立文檔。默認false
。 multi
(可選) - 若是值爲true
,那麼將更新所有符合條件的文檔,不然僅更新一個文檔,默認false
。
save
命令能夠更新或插入一個新文檔,與update
命令不一樣的是,save
只能對一個文檔進行操做。
語法:
db.collection.save();
參數:
document
- 新的文檔;
須要刪除文檔時使用remove
命令,刪除文檔能夠清理掉不須要的數據,釋放存儲空間,提高檢索效率,可是錯誤的刪除會是一場災難,所以在執行數據刪除操做時須要很是的謹慎!
語法:
db.collection.remove( query, justOne );
參數:
query
- BSON類型,刪除文檔的條件。
justOne
- 布爾類型,true
:只刪除一個文檔,false
:默認值,刪除全部符合條件的文檔。
相等條件是最簡單經常使用的的查詢操做,查詢條件是{ field:value }格式的BSON對象。
語法:
{ field: value }
比較條件也是最基本的查詢條件之一,經過運算符的比較運算來篩選或排除文檔,從而獲取到咱們想要的文檔數據。
語法:
{ field: { op: value } }
op
$gt
: 大於$gte
: 大於等於$lt
: 小於$lte
: 小於等於$ne
: 不等於$in
: 包含於$nin
: 不包含於經過MongoDB中提供的豐富運算符,能夠幫助你精確的來檢索數據,好比數值型的字段可使用$gt
、$gte
、$lt
、$ne
等運算符來比較,數組條件的可使用$in
、$nin
來實現。
當字段包含數組,能夠進行數組徹底匹配或匹配特定的值。 單個元素匹配只須要傳入元素的值便可,徹底匹配須要傳入一個數組,特定元素匹配須要"字段.索引"形式傳入參數。
example:
數組徹底匹配:
db.inventory.find( { tags: [ 'fruit', 'food', 'citrus' ] } );
單個元素匹配:
db.inventory.find( { tags: 'fruit' } );
特定元素匹配:
db.inventory.find( { 'tags.0' : 'fruit' } );
查詢數據時,咱們可能會遇到包含嵌入的子文檔數據.
若是文檔中包含嵌入的子文檔,可使用".key"的方式訪問子文檔節點,例如:
db.mycol.find({"access.level":5});
當查詢條件爲多個字段時,須要使用多字段複合條件查詢。
example: 查詢inventory集合中type字段爲food而且價格低於95的全部文檔。
db.inventory.find({ $and:[ {type: "food"}, { price: { $lt: 95 }} ] });
example: inventory集合中檢索數量(qty)大於100或者($or)價格(price)小於9.95的全部數據。
db.inventory.find({ $or:[ { qty: { $gt: 100 } }, { price: { $lt: 9.95 } } ] });
find命令並不直接返回結果,而是返回一個結果集的迭代器,即遊標。
想要獲取數據,咱們可使用next方法來遍歷遊標,以下:
var myCursor = db.inventory.find( { type: "food" } ); var myDocument = myCursor.hasNext() ? myCursor.next() : null; if (myDocument) { var myItem = myDocument.item; print(tojson(myItem)); }
當咱們訪問一個網址後都發生了什麼?(HTTP事務)
- 1.輸入網址
- 2.解析域名
- 把域名解析成IP地址
- 3.創建連接(三次握手)
- 第一次:客戶端發送請求給服務端
- 第二次:客服端接送信息
- 點三次:客服端確認信息
- 4.發送數據
- 5.斷開連接(四次揮手)
第一次握手→
第二次握手←
第三次握手→
雙工信道:同時具有發送和接受信道
請求request:get 請求頭 如:req.query.username. post 請求體 如:req.body.username
1.表現層
2.服務層
3.持久層
1.bin
2.dao 持久層
model
user.js 描述mongoose接收的數據結構類型
database.js 設置mongoose
userDao.js 用require引入mongoose
3.doc 放置規範文件的文件夾
4.node_modules 放置依賴文件
5.public 放置靜態文件,例如js css html
6./routes 表現層
index.js
users.js 須要用 require.("") 引入 service(服務層)中的js文件 userService.js
7.service 服務層
userServicejs 須要用 require.("") 引入 dao(持久層)中的js文件 userDao.js
8.views
9.app.js 須要用 require.("地址") 引入dao(持久層)中的js文件
10.nmp-debug.log
11.package.json