使用Bun来使用MongoDB/mongoose
前天,我试着用Bun的本地实现(SQLite),并且成功运行了,感到非常高兴。所以今天我决定尝试一下MongoDB。
使用Node.js中MongoDB的常见模块mongoose来创建模式并建立连接。
首先,只是简单地补充了一些Bun网站的样本,并进行了少量的尝试,所以我只是简要记录一下。
馒头> MongoDB
# mongoose をインストールする
mkdir mongoose
cd mongoose
bun init
bun add mongoose
# スキーマ用スクリプトを書く
vi 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
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 をインストール
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这样的云服务,可以通过TCP打开网络接收入站端口27017。
如果在此之前端口27017已经启动,然后运行index.ts,就会从Cow得到Moo!的回答。
# 実行する
bun index.ts
# 結果
Moo!
顺便提一句,你可以通过类似下面的方法来确认mondod是否已经启动。
$ ps ax | grep mongod
116808 pts/2 Sl+ 0:03 mongod --journal --smallfiles --port 27017
附注:我写道「在实际使用时,请务必设置密码」,但这是非常重要的事情,所以我额外附上说明。
大致上就是这样的感觉吧。
# 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 認証を使う