一昨日、Bunのネイティブ実装であるSQLiteを試してみて動いたのに気をよくして今日はMongoDBをやってみました。
Node.jsでお馴染みの MongoDB 用のフレームワークmongooseを使ってスキーマを作り接続します。
とりあえず、Bunサイトのサンプルを少し補い試しただけなので軽く記録を残しておきます。
Bun>MongoDB
# mongoose をインストールする
mkdir mongoose
cd mongoose
bun init
bun add mongoose
# スキーマ用スクリプトを書く
vi schema.ts
schema.ts スキーマ用スクリプト
import * as mongoose from 'mongoose';
const animalSchema = new mongoose.Schema(
{
name: {type: String, required: true},
sound: {type: String, required: true},
},
{
methods: {
speak() {
console.log(`${this.sound}!`);
},
},
}
);
# 実行用スクリプトを書く
vi index.ts
index.ts 実行用スクリプト
import * as mongoose from 'mongoose';
import {Animal} from './schema';
// connect to database
await mongoose.connect('mongodb://127.0.0.1:27017/mongoose-app');
// create new Animal
const cow = new Animal({
name: 'Cow',
sound: 'Moo!',
});
await cow.save(); // saves to the database
// read all Animals
const animals = await Animal.find();
animals[0].speak(); // logs "Moo!"
// disconnect
await mongoose.disconnect();
mongodを起動する
# mongod をインストール
sudo apt install mongodb-server-core
# db用のディレクトリを作る
sudo mkdir -p /data/db
# とりあえず今回は自分のユーザー権限で動くようにした
# 例 sudo chown hoge:hoge /data/db
sudo chown ユーザー名:グループ名 /data/db
# 試しなのでパスワードなど無しでmongoDBを起動する
mongod --journal --smallfiles --port 27017
※実際に使う時はパスワード設定など必ずしましょうね。
※この場合、AzureやAWSなどのクラウドなら ネットワークの受信インバウンドの port 27017 をTCPで開けておいたりします。
ここまでで port 27017に立ち上がれば、あとは index.ts を実行すると、Cow から Moo! と返事が返ってきます。
実行する
# 実行する
bun index.ts
# 結果
Moo!
因みに、mondodの起動は例えばこんな感じで確認できます。
mondodがport 27017に起動してるか確認する
$ ps ax | grep mongod
116808 pts/2 Sl+ 0:03 mongod --journal --smallfiles --port 27017
P.S. 「実際に使う時はパスワード設定など必ずしましょうね。」と書きましたが、大事なことなのでおまけで説明しておきますね。
ざっとこんな感じかな。
# mongod --journal --smallfiles --port 27017 付近を
# 例えば下記のようにします
#
# db用のディレクトリを作る 上記では/data/dbでしたが、
# 複数の mongod を走らせる場合用に/data/db/mydbとしておきます
sudo mkdir -p /data/db/mydb
# log用のディレクトリを作る
sudo mkdir -p /db/log/mydb
# MongoDBの設定ファイルを作る
# 必要に応じて /etc/mongod.conf にbind_ipを設定する
#
# 一旦、authなしで起動
$ mongod --journal --smallfiles --port 27017 --dbpath /data/db/mydb --fork --logpath /db/log/mydb/mongodb.log
$ mongo localhost:27017 # infomation
# これで以下のプロンプト入力を求められる
> use mydb #<DB名>を入れる
> db.createUser({
user: "<DBのユーザー名>",
pwd: "<DBのパスワード>",
roles: [{
role: "readWrite", db: "mydb"
}]
})
>exit # 終了
# その後、認証付きでmongodを起動する
$ mongod --journal --smallfiles --port 27017 --dbpath /data/db/mydb --fork --logpath /db/log/mydb/mongodb.log --logRotate rename --auth
# パラメータ
# --journal ジャーナリングを有効化します
# --smallfiles 小さなファイルサイズでストレージを最適化します
# --port リクエストを待ち受けるポート番号 デフォルト27017
# --dbpath データベースファイルを保存するディレクトリ
# --forkプロセスをフォークしてバックグラウンドで実行します
# --logpath ログファイルのパスを指定します
# 後で使う
# --logRotate rename ログローテーションのメソッド
# --auth 認証を使う