🐥

DenoでArangoDBにアクセスしてみた(darango)

2021/11/15に公開

Tnifey/arangoを使ったサンプルはこちら
https://zenn.dev/rururu3/articles/a200ef31c87f62

DenoでArangoDBにアクセス

Denoのハンズオンに参加してみてDeno触ってみるついでにArangoDBにアクセスできるか試しました

darangoがあった

ぐぐったらあったので使ってみた
https://deno.land/x/darango@0.0.4

サンプル

darango.ts

import { Arango } from "https://deno.land/x/darango/mod.ts";

// Connect and obtain a JWT token from the server by providing basic auth details.
const arango = await Arango.basicAuth({
  uri: "http://localhost:8529/_db/_system",
  username: "ユーザーID",
  password: "パスワード",
});

// aqlでデータ作って取得する
async function sample1() {
  try {
    // forでデータを5件返すAQL
    const payload = 5;
    const cursor = await arango.query<any>(`
    let nums = ${payload}
    for i in 1..nums // [1,2,3,4,5]
      return i + 1
    `, { batchSize: 2 });
    for await (const d of cursor) {
      // バッチサイズが2なので2件取得される
      console.log({
        cursor: d,
      });
    }      
  }
  catch (error) {
    console.log(error);
  }
}

// Collectionから取得する
async function sample2() {
  try {
    // Charactersからデータを取得するAQL
    const cursor = await arango.query<any>(`
    for u in Characters
      return u
    `, { batchSize: 5 });
    // バッチサイズが5なので5件取得される
    for await (const d of cursor) {
      // バッチサイズが2なので2件取得される
      console.log({
        cursor: d,
      });
      // nextとかないので今の所一回取得はbreakするしかなさそう
      break;
    }      
  }
  catch (error) {
    console.log(error);
  }
}
  
  
await sample1();
await sample2();

結果

PS E:\DockerProject\arangodb\denosample> deno run --allow-net darango.ts
Check file:///E:/DockerProject/arangodb/denosample/darango.ts
{ cursor: [ 2, 3 ] }
{ cursor: [ 4, 5 ] }
{ cursor: [ 6 ] }
{
  cursor: [
    {
      _key: "112602",
      _id: "Characters/112602",
      _rev: "_dBBNWXq---",
      name: "Ned",
      surname: "Stark",
      alive: true,
      age: 41,
      traits: [ "A", "H", "C", "N", "P" ]
    },
    {
      _key: "112603",
      _id: "Characters/112603",
      _rev: "_dBBNWXq--_",
      name: "Robert",
      surname: "Baratheon",
      alive: false,
      traits: [ "A", "H", "C" ]
    },
    {
      _key: "112604",
      _id: "Characters/112604",
      _rev: "_dBBNWXq--A",
      name: "Jaime",
      surname: "Lannister",
      alive: true,
      age: 36,
      traits: [ "A", "F", "B" ]
    },
    {
      _key: "112605",
      _id: "Characters/112605",
      _rev: "_dBBNWXq--B",
      name: "Catelyn",
      surname: "Stark",
      alive: false,
      age: 40,
      traits: [ "D", "H", "C" ]
    },
    {
      _key: "112606",
      _id: "Characters/112606",
      _rev: "_dBBNWXq--C",
      name: "Cersei",
      surname: "Lannister",
      alive: true,
      age: 36,
      traits: [ "H", "E", "F" ]
    }
  ]
}

Discussion