僕は技術ができない

技術のできないスーツ園児ニアが考えていること

はじめての Cosmos DB ~JavaScriptでクエリを投げるまで~ (園児向け)

今日はAzure SDK for JavaScript で CosmosDB からデータを取ってきたい。

が、、情弱にとってはMicrosoftはワンダーランドだ![#要出典]

なので、技術のできない園児向けに初めの一歩を残そうと思う。途中で力尽きるかもしれない。そんなときは是非、水着のお姉さんに励まして欲しい。そして一かけらのフィレオフィッシュを。。。

誰のための記事か

Cosmos DB を使ったことのない よいこのみんな

Azure SDK for JavaScript で Cosmos DB を触ったことのない よいこのみんな

僕も今日初めて Cosmos DB 触りました。全然わからん。

前置き

Azure SDK for JavaScript での CosmosDB のサンプルアプリがある。

github.com

公式リファレンスは以下。

docs.microsoft.com

ただ、このサンプルアプリのコード例にはクエリの投げ方が書いていない。

もちろん、このリポジトリを掘ればそれらしきものが出てくるし、公式ドキュメントも「できる人」が見れば一撃でわかるのだろう。

だが、園児にはかなりキツい。

誰でもできるように、やり方を園児向けにまとめたい。

前準備

Cosmos DBを作る

とりあえず、Core(SQL)にしとけばDynamoDBみたいな感じで使えるっぽい。

f:id:contemporarycuz:20190605012121p:plain:w400
脳死で作った。よくわかってない。

リソースに移動するとサンプルアプリを作るよう勧められるが、園児にとってこれは罠

f:id:contemporarycuz:20190605012234p:plain
初見〇し。いきなりアプリ作らせられてしまいそうになる。

データエクスプローラーから New Container をクリック

f:id:contemporarycuz:20190605001358p:plain:w500


データベース名やコンテナー名、パーティションキーなどを決める。

f:id:contemporarycuz:20190605002620p:plain
デフォルトで"id"が一意キーになるみたいなので一意キーの設定は任意だと後で気づいた。


New Itemをクリック

f:id:contemporarycuz:20190605002850p:plain


こんな感じでどんどん突っ込んでいく。

f:id:contemporarycuz:20190605003228p:plain
これはDynamoDBより楽(ポータルのUIからお試しする場合)


とりあえず4個くらい入れてみた。

id uniquekey country
001 aoifioeggfuyeg hogeLand
002 dhiuafhiuhir fugaLand
003 adofjoapwre13294 hogeLand
004 daosgdpreree fooLand


ポータルからクエリを投げてみる。

f:id:contemporarycuz:20190605004927p:plain
ちゃんとcountryでフィルタできた


コーディングの準備

VS Codeを開き、適当にフォルダを切る。

以下を実行。

npm install @azure/cosmos

jsファイル(tutorial.js)を作る。

フォルダの中はこんな感じ。

f:id:contemporarycuz:20190604235417p:plain
園児でも把握可能なフォルダ構造

コードを書く

ここからが本題。

ポータルから以下を確認しておく。

1.エンドポイント f:id:contemporarycuz:20190605011932p:plain

2.キー f:id:contemporarycuz:20190605011339p:plain

3.DB ID 4.Container ID f:id:contemporarycuz:20190605011544p:plain


コードは以下の通り。

const cosmos = require("@azure/cosmos");

// クライアントの生成
const CosmosClient = cosmos.CosmosClient;

const endpoint = '' //1.ここにエンドポイントを入力
const masterKey = '' //2.ここにキーを入力
const client = new CosmosClient(
    {
        endpoint,
        auth: {
            masterKey
        }
    }
);

const db_id = 'myDatabase'; //3.ここにDB IDを入力
const container_id = 'myContainer'; //4.ここにContainer IDを入力

// クエリするための関数
async function queryCosmos() {
    const query_spec = 'SELECT * FROM c WHERE c.country = "hogeLand"';
    const res = await client.database(db_id)
                            .container(container_id).items
                            .query(
                                query_spec,
                                {
                                    // パーティションを跨いだ検索には必須
                                    enableCrossPartitionQuery: true 
                                }).toArray();
    console.log(res);
}

queryCosmos().catch(err => {
    console.error(err);
});

実行

node tutorial.js

結果

{ result:
   [ { id: '001',
       uniquekey: 'aoifioeggfuyeg',
       country: 'hogeLand',
       (略)
     },
     { id: '003',
       uniquekey: 'adofjoapwre13294',
       country: 'hogeLand',
       (略)
     } ],
  headers: undefined }

めでたくクエリ投げて結果を持ってくることができた!