medi-y-sato
10/5/2017 - 9:44 AM

nedb使ってみた

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