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のキャラクターがゆるくて可愛いです。
RethinkDBのキャラもゆるいですよね。和みます。