[NeDBを使い方]データベースにデータをインサートしよう。

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

NeDBはJavaScriptで作られたデータベースです。 Node.js、nw.js、エレクトロン、ブラウザ等で動かすことができます。 Github NeDBはドキュメント型データベースでJSONをそのまま保存できます。 そのため、JavaScriptのプログラムと親和性が高く、データの取得、利用が簡単にできます。 また、NeDBはMongoDBと互換性があり、一つのデータベースはMongoDBのコレクションと対応しています。 対応は下記の通りです。
  • データベース→コレクション
  • データロウ→ドキュメント
今回は、NeDBを使うためにロード/クリエイトしたデータベースにデータをインサートする方法について書いていきます。

NeDBのデータベースにデータをインサートする

NeDBはJSON構造を保存できるドキュメント型データベースです。 そのため、保存できるデータのタイプはJSONと同様の下記のタイプとなっています。
  • String
  • Number
  • Boolean
  • Date
  • null
  • Array
  • Objects

NeDBにインサートするドキュメントの制約事項

  • 値がundefinedのフィールドは保存されません
  • インサートするドキュメントが_idフィールドを持たない場合は英数字16桁の文字列が_idフィールドに保存されます。
  • フィールド名は下記の命名規則があります。
    • ‘$’で始まってはいけない
    • ‘.’を含んではいけない

単一のドキュメントをインサートする

Nedbにデータをインサートする場合、Datastore#insertを使用します。 Datastore#insertは、下記の2つの引数をとります
  • document:インサートするドキュメントを指定します。
  • callback:インサート終了時に呼ばれるコールバックを指定します。コールバックは下記の2つの引数をとります。引数はオプションです。
    • err:インサート失敗時のメッセージ
    • newDoc:インサートに成功したドキュメント。インサート時に_idフィールドを指定しなかった場合、生成された_idを含んでいます。
export function insertDocument() {
    let db = new Datastore();
    var doc = {
        hello: 'world'
        , n: 5
        , today: new Date()
        , nedbIsAwesome: true
        , notthere: null
        , notToBeSaved: undefined  // Will not be saved
        , fruits: [ 'apple', 'orange', 'pear' ]
        , infos: { name: 'nedb' }
    };
    db.insert(doc, function (err, newDoc) {
        console.log('err', err);
        console.log('newDoc', newDoc);
    });
}

複数のドキュメントをインサートする

Nedbに一度に複数のドキュメントをインサートするバルクインサートをサポートしています。 バルクインサートの場合も単一のドキュメントをインサートする場合と同様にDatastore#insertを使用します。 下記のように引数は一緒ですが、第一引数のdocumentにオブジェクトのアレイを渡すことです。
  • document:インサートするドキュメントのアレイを指定します。
  • callback:インサート終了時に呼ばれるコールバックを指定します。コールバックは下記の2つの引数をとります。引数はオプションです。
    • err:インサート失敗時のメッセージ
    • newDoc:インサートに成功したドキュメントのアレイ。インサート時に_idフィールドを指定しなかった場合、生成された_idを含んでいます。
また、インサートはアトミックな操作なので、ドキュメント間に制約違反(ユニーク等)があった場合、全てのインサートが失敗します。
export function insertBulkDocument() {
    let db = new Datastore();
    var doc =[{ a: 5 }, { a: 42 }, { a: 5 }];
    db.insert(doc, function (err, newDoc) {
        console.log('err', err);
        console.log('newDoc', newDoc);
    });
}