LoginSignup
6
5

More than 5 years have passed since last update.

ElixirでOrientDBにアクセスしてみる

Posted at

1. 気になったこと

以前の投稿で軽く、OrientDBに接続してみました。

GitHubやTwitter, Facebookなどから人物相関図を作りたいな、と思った時にはなかなかに便利そうなOrientDBですが、手動でぽちぽちとデータは登録したくはないですね。

せっかくなので、Elixirでなにかないかなー、とGitHubを検索すると下記がありました。

便利な世の中です。。

2. 使ってみる

2-1. Mixプロジェクトに依存を追加する

  defp deps do
    [{:marco_polo, "~> 0.1"}]
  end

からの、mix.deps getをします。

2-2. iexで試してみた

iex -S mixして、使ってみます。

iex(1)> {:ok, conn} = MarcoPolo.start_link(user: "admin", password: "admin", connection: {:db, "GratefulDeadConcerts", :graph})

{:ok, #PID<0.383.0>}

これで、接続はできたようです。

次にクエリを投げてみます。

iex(4)> query = "select * from employee"
"select * from employee"
iex(5)> MarcoPolo.command(conn, query)  
{:ok,   
 %{linked_records: #HashDict<[]>,
   response: [%MarcoPolo.Document{class: "Employee",
     fields: %{"empno" => 101, "firstName" => "John", "lastName" => "Jacob",
       "out_WorksAt" => {:link_bag, [#MarcoPolo.RID<#19:0>]}, "sal" => 5000},
     rid: #MarcoPolo.RID<#17:0>, version: 2},
    %MarcoPolo.Document{class: "Employee",
     fields: %{"empno" => 102, "firstName" => "Adam", "lastName" => "Bill",
       "out_WorksAt" => {:link_bag, [#MarcoPolo.RID<#19:1>]}, "sal" => 7000},
     rid: #MarcoPolo.RID<#17:1>, version: 2},
    %MarcoPolo.Document{class: "Employee",
     fields: %{"empno" => 103, "firstName" => "David", "lastName" => "Manon",
       "out_WorksAt" => {:link_bag, [#MarcoPolo.RID<#19:2>]}, "sal" => 4000},
     rid: #MarcoPolo.RID<#17:2>, version: 2}]}}

linked_recordsなるものが取得されます。
この中で、リンクの属性があるものについては、link_bagというものが付与されて、Vectorが取得できるみたいです。

他にもデータ登録系のクエリもごくごく普通に登録できそうなので、なかなか便利だな^^ という印象です。

3. 感想


本日は以上となります。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5