nedb使ってみた
const Datastore = require("nedb");
const db = new Datastore({ filename: "data/test.db", autoload: true });
const testDoc = {
name: "testName",
value: "testValue",
number: 13456
};
db.insert(testDoc, (error, document) => {
console.dir(document);
console.error(error);
});
db.find({ name: /test/ }, (error, document) => {
console.dir(document);
console.error(error);
});
/*
Ionic上でProviderとして使うのを想定して組んでみたテスト
Androidエミュレータでも動いてびっくり
*/
import { Injectable } from "@angular/core";
import * as Datastore from "nedb";
@Injectable()
export class NedbProviderSample {
filename: string = "data/database.db";
dataStore: Datastore;
constructor() {
console.log("Hello ChatLogProvider Provider");
this.dataStore = new Datastore({ filename: this.filename, autoload: true });
}
/**
* レコードの新規作成
* @param document Object 書き込むドキュメントをJSONオブジェクトで指定
* @return targetKey:string 発行されたレコードキーをstringで返す
*/
public create(document: object): Promise<object> {
return new Promise((resolve, reject) => {
this.dataStore.insert(document, (error, result) => {
if (error) {
reject(error);
} else {
resolve(result);
}
});
});
}
/**
* レコードの削除
* @param targetKey 削除対象のレコードキー
* @return bookean 削除の成否をbooleanで
*/
public delete(targetKey: string): Promise<boolean> {
return new Promise((resolve, reject) => {
this.dataStore.remove({ _id: targetKey }, {}, (error, result) => {
if (error) {
reject(error);
} else {
resolve(result);
}
});
});
}
/**
* レコードの検索
* @param param0 {
* targetFieldName : 検索対象のフィールド名
* queryString: 検索に使用されるクエリ文字列
* }
* @return Array<object> 検索結果をドキュメントObjectのArrayで
*/
public findRecords({ targetFieldName: targetFieldName, queryString: queryString }): Promise<Array<object>> {
return new Promise((resolve, reject) => {
let queryObject;
if (queryObject) {
queryObject = { targetFieldName: queryString };
} else {
// find()に渡す検索オブジェクトを空っぽにすると、全件返ってくる
queryObject = {};
}
this.dataStore.find(queryObject, (error, result) => {
if (error) {
reject(error);
} else {
resolve(result);
}
});
});
}
}