作用:
初始化一個(gè)數(shù)據(jù)存儲,相當(dāng)于MongoDB的一個(gè)集合、Mysql的一張表。
options對象配置參數(shù):
① filename(可選): 數(shù)據(jù)存儲文件路徑。如果為空,數(shù)據(jù)將會自動存儲在內(nèi)存中。注意路徑不能以“~”結(jié)尾。
② inMemoryOnly(可選,默認(rèn)false): 數(shù)據(jù)存儲方式。是否只存在于內(nèi)存中。
③ loadDatabase: 將數(shù)據(jù)加載到內(nèi)存中。
④ timestampData(可選,默認(rèn)false): 自動生成時(shí)間戳,字段為createdAt和updateAt,用來記錄文檔插入和更新操作的時(shí)間點(diǎn)。
⑤ autoload(可選,默認(rèn)false): 如果使用autoload,當(dāng)數(shù)據(jù)存儲被創(chuàng)建時(shí),數(shù)據(jù)將自動從文件中加載到內(nèi)存,不必去調(diào)用loadDatabase。注意所有命令操作只有在數(shù)據(jù)加載完成后才會被執(zhí)行。
⑥ onload(可選): 在數(shù)據(jù)加載完成后被調(diào)用,也就是在loadDatabase方法調(diào)用后觸發(fā)。該方法有一個(gè)error參數(shù),如果試用了autoload,而且沒有定義該方法,在數(shù)據(jù)加載過程中出錯將默認(rèn)會拋出該錯誤。
⑦ afterSerialization(可選): 在數(shù)據(jù)被序列化成字符串之后和被寫入磁盤前,可以使用該方法對數(shù)據(jù)進(jìn)行轉(zhuǎn)換。比如可以做一些數(shù)據(jù)加密工作。該方法入?yún)橐粋€(gè)字符串(絕對不能含有字符“\n”,否則數(shù)據(jù)會丟失),返回轉(zhuǎn)換后的字符串。
⑧ beforeDeserialization(可選): 與afterSerialization相反。兩個(gè)必須成對出現(xiàn),否則會引起數(shù)據(jù)丟失,可以理解為一個(gè)加密解密的過程。
⑨ corruptAlertThreshold(可選): 默認(rèn)10%,取值在0-1之間。如果數(shù)據(jù)文件損壞率超過這個(gè)百分比,NeDB將不會啟動。取0,意味著不能容忍任何數(shù)據(jù)損壞;取1,意味著忽略數(shù)據(jù)損壞問題。
⑩ compareStrings(可選): compareStrings(a, b)比較兩個(gè)字符串,返回-1、0或者1。如果被定義,將會覆蓋默認(rèn)的字符串比較方法,用來兼容默認(rèn)方法不能比較非US字符的缺點(diǎn)。
注:如果使用本地存儲,而且沒有配置autoload參數(shù),需要手動調(diào)用loadDatabase方法,所有操作(insert, find, update, remove)在該方法被調(diào)用前都不會執(zhí)行。還有就是,如果loadDatabase失敗,所有命令也將不會執(zhí)行。
示例
// 示例 1: 內(nèi)存數(shù)據(jù)庫(沒有必要調(diào)用loadDatabase方法)
var Datastore = require('nedb'),
db = new Datastore();
// 示例 2: 本地存儲需要手動調(diào)用loadDatabase方法
var Datastore = require('nedb'),
db = new Datastore({ filename: 'path/to/datafile' });
db.loadDatabase(function (err) { // 回調(diào)函數(shù)(可選)
// Now commands will be executed
});
// 示例 3: 帶有autoload配置項(xiàng)的本地存儲
var Datastore = require('nedb'),
db = new Datastore({ filename: 'path/to/datafile', autoload: true });
// You can issue commands right away
// 示例 4: 創(chuàng)建多個(gè)數(shù)據(jù)存儲
db = {};
db.users = new Datastore('path/to/users.db');
db.robots = new Datastore('path/to/robots.db');
// 如果不配置autoload,需要加載數(shù)據(jù)庫(該方法是異步的)
db.users.loadDatabase();
db.robots.loadDatabase();
更多建議: