WOrmLmdb

WOrmLmdb

new WOrmLmdb(optopt) → {Object}

Description:
  • 操作資料庫(LMDB)

    回傳物件為EventEmitter,除各操作函數外另發出change與error兩事件,供呼叫端於單一處集中觀察資料異動與失敗。 事件僅為附加通知,其所送出之資訊皆另有正規管道(操作結果經resolve、整批性錯誤經reject、逐筆失敗經該筆之err欄位), 故不監聽亦能取得完整資訊,且監聽與否不改變任何操作之回傳值。

    change事件,參數為(mode, data, res),於資料實際異動成功後發出: mode為操作別字串,可為'insert'、'insertBulk'、'save'、'del'、'delAll';save內若逐筆走自動插入則該筆另發出mode為'insert'之事件。 data為本次操作之輸入數據,delAll固定為null。 res為本次操作之回傳結果。 逐筆函數以整批為單位發出一次而不逐筆發出,select與selectByPk不發出本事件。

    error事件,參數為(mode, data, err),於操作發生錯誤時發出: mode為操作別字串,可為'select'、'selectByPk'、'insert'、'insertBulk'、'save'、'del'、'delAll'。 data為本次操作之輸入數據,無輸入數據者為null。 err為錯誤訊息字串,內容與正規管道所送出者一致。 整批性錯誤於reject之前發出;逐筆失敗於該筆結果定案後發出,每筆一次。 註: 逐筆失敗時整批仍resolve,故收到本事件不表示該次呼叫失敗;正常結果(如查無數據、主鍵未命中、全數已存在)不發出本事件。

Source:
Parameters:
Name Type Attributes Default Description
opt Object <optional>
{}

輸入設定物件,預設{}

Properties
Name Type Attributes Default Description
url String <optional>
'_db'

輸入資料庫用資料夾字串,預設'_db'

db String <optional>
'worm'

輸入使用資料庫名稱字串,預設'worm'

cl String <optional>
'test'

輸入使用資料表名稱字串,預設'test'

useCache Boolean <optional>
false

輸入是否使用select快取,適用於單程序操作,預設false

autoGenPk Boolean <optional>
true

輸入insert與save於數據未帶有效主鍵(本套件為id欄位)時是否自動產生主鍵值,預設true;給false代表主鍵改由呼叫端自備,套件不產生亦不檢查其唯一性與格式,未帶有效主鍵者將reject

Returns:

回傳操作資料庫物件,各事件功能詳見說明

Type
Object

Methods

(async, static) del(data) → {Promise}

Description:
  • 刪除數據

Source:
Parameters:
Name Type Description
data Object | Array

輸入數據物件或陣列

Returns:

回傳Promise,resolve回傳與輸入等長之刪除結果陣列,各筆為{n,nDeleted,ok},n為主鍵命中筆數,單筆失敗或未給有效id者ok為0並附err,reject回傳錯誤訊息

Type
Promise

(async, static) delAll(findopt) → {Promise}

Description:
  • 刪除全部數據,需與del分開,避免未傳數據導致直接刪除全表

Source:
Parameters:
Name Type Attributes Default Description
find Object <optional>
{}

輸入刪除條件物件

Returns:

回傳Promise,resolve回傳刪除結果物件{n,nDeleted,ok},n與nDeleted同為實際刪除筆數,reject回傳錯誤訊息

Type
Promise

(async, static) insert(data, optionopt) → {Promise}

Description:
  • 插入數據

Source:
Parameters:
Name Type Attributes Default Description
data Object | Array

輸入數據物件或陣列

option Object <optional>
{}

輸入設定物件,預設為{}

Properties
Name Type Attributes Default Description
returnList Boolean <optional>
false

輸入是否改回傳逐筆結果布林值,預設false。給true時回傳與輸入等長保序之陣列,各筆為{n,nInserted,ok},nInserted為1即該筆為新增;聚合計數只回答有幾筆是新的,逐筆結果方能回答是哪幾筆,供下游僅對新資料執行昂貴動作。回傳形式由呼叫點靜態決定,共用之結果處理程式碼不可跨不同取值之呼叫點混用

Returns:

回傳Promise,resolve依returnList回傳插入結果:預設回傳聚合物件{n,nInserted,ok},n為輸入筆數、nInserted為實際插入筆數;returnList為true時回傳逐筆陣列,各筆n恆為1(主鍵命中或經插入)、ok恆為1(insert之錯誤皆屬整批性而reject,不進逐筆);reject回傳錯誤訊息

Type
Promise

(async, static) insertBulk(data) → {Promise}

Description:
  • 批次插入數據,全批視為一個單位,全部插入成功或一筆都不寫入 註: 本函數非insert之加速版,兩者衝突政策不同。insert於主鍵已存在時跳過該筆而整批ok為1, 本函數則整批reject且不寫入任何一筆;同批含重複主鍵者亦視為衝突。確無衝突時兩者結果相同 註: 於本套件不會較insert快,因insert本即以Promise.all一次送出全部條件寫入而非逐筆await, 提供本函數係為與其他w-orm系列套件維持同一組函數,令呼叫端得於各套件間替換而不須改寫呼叫

Source:
Parameters:
Name Type Description
data Object | Array

輸入數據物件或陣列

Returns:

回傳Promise,resolve回傳插入結果物件{n,nInserted,ok},n為輸入筆數、nInserted成功時恆等於n,任一筆主鍵已存在則reject回傳錯誤訊息

Type
Promise

(async, static) save(data, optionopt) → {Promise}

Description:
  • 儲存數據

Source:
Parameters:
Name Type Attributes Default Description
data Object | Array

輸入數據物件或陣列

option Object <optional>
{}

輸入設定物件,預設為{}

Properties
Name Type Attributes Default Description
autoInsert boolean <optional>
true

輸入是否於儲存時發現原本無數據,則自動改以插入處理,預設為true

Returns:

回傳Promise,resolve回傳與輸入等長之儲存結果陣列,各筆為{n,nInserted,nModified,ok},n為主鍵命中筆數,單筆失敗者ok為0並附err,reject回傳錯誤訊息

Type
Promise

(async, static) select(findopt) → {Promise}

Description:
  • 查詢數據

Source:
Parameters:
Name Type Attributes Default Description
find Object <optional>
{}

輸入查詢條件物件

Returns:

回傳Promise,resolve回傳數據,reject回傳錯誤訊息

Type
Promise

(async, static) selectByPk(pk) → {Promise}

Description:
  • 由主鍵查詢單筆數據,因直接由LMDB取值,不需如select提取全表數據再過濾,故數據量大時效能較佳 註: 本套件之主鍵欄位固定為id,尚未支援指定其他欄位為主鍵

Source:
Parameters:
Name Type Description
pk String

輸入主鍵值字串,本套件之主鍵欄位為id

Returns:

回傳Promise,resolve回傳數據物件,若無此主鍵則回傳null,reject回傳錯誤訊息

Type
Promise