初入javascript知識點(八)

jQuery性能優化

  • 1.對於在jQuery中重複使用的標籤,在第一次選擇的時候就用一個變量把它保存起來。
  • 2.在使用類名選擇器時,加上父級選擇器(父級選擇器使用id或標籤名)
  • 3.使用find方法來選取後代
  • 4.儘可能使用jquery中的鏈式寫法
  • 5.使用事件委託

數據庫

數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫。javascript

MongoDB簡介

MongoDB是一個基於分佈式文件存儲的數據庫,由C++語言編寫,旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB是一個高性能,開源,無模式的文檔型數據庫,官方給本身的定義是Key-value存儲(高性能和高擴展)和傳統RDBMS(豐富的查詢和功能)之間的一座橋樑。css

Document & BSON

MongoDB中保存的數據格式爲BSON,如:html

{
  name: "sue",
  age: 26,
  status: "A",
  groups: [ "news", "sports" ]
}

MongoDB中數據的基本單元稱爲文檔(Document),它是MongoDB的核心概念,由多個鍵極其關聯的值有序的放置在一塊兒組成,數據庫中它對應於關係型數據庫的行。 數據在MongoDB中以BSONBinary-JSON)文檔的格式存儲在磁盤上。 BSON(Binary Serialized Document Format)是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON,BSON和JSON同樣,支持內嵌的文檔對象和數組對象,可是BSON有JSON沒有的一些數據類型,如DateBinData類型。 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中,投影指的是對出如今結果集中的對象屬性的篩選。

find()方法

MongoDB中查詢檢索數據時使用find命令,使用方法以下:

語法:

db.collection.find(criteria,projection);

參數說明:

criteria – 查詢條件,文檔類型,可選。

projection – 返回的字段,文檔類型,可選,若需返回全部字段,則忽略此參數。

find命令兩個可選參數,criteria爲查詢條件,projection爲返回的字段,若是不傳入條件數據庫會返回該集合的全部文檔。

修改文檔

update()命令

update命令能夠更新指定文檔的特定字段值,也能夠替換整個文檔,若是更新操做會增長文檔大小,MongoDB將從新分配空間並從新定位。

語法:

db.collection.update(query,update,{upsert:boolean,multi:boolean});

參數:

query - 查詢條件,文檔,和find中的查詢條件寫法一致。 update - 修改內容,文檔。
 upsert(可選) - 若是值爲true,那麼當集合中沒有匹配文檔時,建立文檔。默認false。 multi(可選) - 若是值爲true,那麼將更新所有符合條件的文檔,不然僅更新一個文檔,默認false

save()命令

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});

複合查詢

當查詢條件爲多個字段時,須要使用多字段複合條件查詢。

AND複合查詢

example: 查詢inventory集合中type字段爲food而且價格低於95的全部文檔。

db.inventory.find({
  $and:[
    {type: "food"},
    { price: { $lt: 95 }}
  ]
});

OR複合查詢

example: inventory集合中檢索數量(qty)大於100或者($or)價格(price)小於9.95的全部數據。

db.inventory.find({
  $or:[
    { qty: { $gt: 100 } },
    { price: { $lt: 9.95 } }
  ]
});

cursor遊標

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.斷開連接(四次揮手)

 

Client 客服端

第一次握手→

第二次握手←

第三次握手→

Server 服務端
 

 

雙工信道:同時具有發送和接受信道


http協議:又稱爲無狀態協議,每一次請求對於服務器而言都是一次新的請求

請求request:get 請求頭 如:req.query.username. post 請求體 如:req.body.username

nodejs針對與後臺的框架express

模塊化:模塊化的目的是:

  • 解決變量名衝突的問題
  • 依賴管理問題

commonjs規範:每個JS文件就是一個模塊

  • 1.經過module.exports暴露模塊的藉口
  • 2.經過require(路徑)來引入模塊

 

Nodejs三層分離

1.表現層

2.服務層

3.持久層

用express搭建的nodejs結構:

myapp

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

相關文章
相關標籤/搜索