コンパイラかく語りき

import { Fun } from 'programming'

node.jsでRethinkDBを扱うためのORM "Thinky" を試してみた

Thinkyというnode.jsでRethinkDBを扱うためのORMを試してみました。

RethiknDB: https://www.rethinkdb.com/ Thinky: https://thinky.io/

参考ページ

公式のドキュメントのクイックスタートというページを参考にしてみました。

https://thinky.io/documentation/

以下で示すコードは、その写経と若干の補足コメントです。

コード

パッケージインポート

// Thinkyを実行すると、RethinkDBの接続プールが作成されます。
const thinky = require('thinky')() 
// コンソール出力:"Creating a pool connected to localhost:28015"

// typeはスキーマ定義の型を指定するために使います。
const type = thinky.type

RethinkDBへのドライバも利用可

// thinkyはRethinkDBへのドライバの参照を持っています。
const r = v.r
r.now().run().then((time) => {
  return time // 2016-09-19T05:22:53.098Z (例)
})

モデルの作成

// モデルの作成:thinky.createModel(tableName, schema, options)
const Post = thinky.createModel("Post", {
  id: type.string(),
  title: type.string(),
  content: type.string(),
  idAuthor: type.string()
})

const Author = thinky.createModel("Author", {
  id: type.string(),
  name: type.string()
})
// 有効なスキーマについては -> https://thinky.io/documentation/schemas/

モデルのジョイン

// モデルのジョイン: belongsTo(OtherModel, fieldName, leftKey, rightKey[, options]))
Post.belongsTo(Author, "author", "idAuthor", "id")

ドキュメントの作成

// モデルを初期化して、ドキュメントを作成します。
const post = new Post({
  title: "Hello world",
  content: "This is an example"
})
const author = new Author({
  name: "Michel"
})

// ドキュメントをジョインさせます。
post.author = author

ドキュメントの保存

// ドキュメントの保存(ジョイン含む): SaveAll([modelToSave], [callback])
post.saveAll({author: true}).then((result) => {
  //
})
// 外部キーが自動的にセットされます。

データの取得

// PostをそのAuthorとともに取得します。
Post.get('d2b2ee18-c8d2-45a0-9e89-35a7e026aea5') // Idは適当
  .getJoin({author: true}).then((post) => {
      // 取得結果↓↓
      // model {
      //  author: model { id: '97f5faed-4c7a-449c-8570-4aca9a273bf9', name: 'Michel' },
      //  content: 'This is an example',
      //  id: 'd2b2ee18-c8d2-45a0-9e89-35a7e026aea5',
      //  idAuthor: '97f5faed-4c7a-449c-8570-4aca9a273bf9',
      //  title: 'Hello world'
      // }
  
    // Authorの名前を変更します。
    post.author.name = 'John'
    post.saveAll({author: true})
})

ファーストインプレッション

いいですね。 スキーマの型定義や、シンプルなデータのリトリーブが嬉しいです。

次回は、リレーション周りをもう少し詳しく見てみます。

おまけ

Thinkyのキャラクターがゆるくて可愛いです。

Screen Shot 2016-09-19 at 3.02.47 PM.png

RethinkDBのキャラもゆるいですよね。和みます。