adminMongo で private subnet に設置した mongoDB からデータを取得する

環境:

mongoDB を private subnet に設置

adminMongo を public subnet に設置

github.com

 

@public subnet App instance

cd projectDirectory

git clone https://github.com/mrvautin/adminMongo.git && cd adminMongo

cd adminMongo

adminMongo/config/app.js を編集

   

   port, pass は任意

Public Subnet のセキュリティ設定

  // public subnet と private subnet との接続

  エグレス >>>

    ソース: private subnet の CIDR

    プロトコル: TCP

    ソースポート: All

    宛先ポート: mongoDB が使用しているポート

  // public subnet のクライアント(adminMongo) と private subnet の接続

  イングレス >>>

    ソース: adminMongo 管理者の IP

    プロトコル: すべて

    ソースポート: All

    宛先ポート: adminMongo/config/app.js で指定したポート

  エグレス >>>

    ソース: private subnet の CIDR

    プロトコル:TCP

    ソースポート: All

    宛先ポート:  adminMongo/config/app.js で指定したポート

 

Private Subnet のセキュリティ設定

  イングレス >>>

    ソース:  public subnet と private subnet が設置された VCN の CIDR

    プロトコル: TCP

    ソースポート: All

    宛先ポート: mongoDB が使用しているポート

adminMongo の設定

  adminMongo にアクセス

    http://APP_URL:adminMongo/config/app.js で指定したポート

  Connection を作成

  connection string は

    mongodb://PRIVATE_IP:adminMongo/config/app.js で指定したポート

 

 

relative articles:

monteecristoo.hatenablog.com

monteecristoo.hatenablog.com

 

sudo apt update でエラー:W: GPG error: https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/6.0 Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6A26B1AE64C3C388 E: The repository 'https://repo.mongod

sudo apt update で下エラー

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 Release: The following signatures were invalid: EXPKEYSIG 68818C72E52529D4 MongoDB 4.0 Release Signing Key <packaging@mongodb.com>

W: GPG error: https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/6.0 Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 6A26B1AE64C3C388
E: The repository 'https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/6.0 Release' is not signed.

solution)

必要のない古い list を削除

/etc/apt/sources-list.d/mongodb-org-4.0.list,  /etc/apt/sources-list.d/mongodb-org-4.0.list.save を削除

mongoDB6.0 の key を取得

curl -fsSL https://pgp.mongodb.com/server-6.0.asc | \
   sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg \
   --dearmor

 

ref: 

www.mongodb.com

 

sudo apt update >>> successfully updated

mongoDB: Upgrade した直後、mongod で DB がすぐにシャットダウンしてしまう

環境:

mongoDB@4.2 から @6.0.6 にアップグレード

 

error:

This version of MongoDB is too recent to start up on the existing data files. Try MongoDB 4.2 or earlier

 

solution:

root ディレクトリの data フォルダを削除して再度dataフォルダを設置

ref:

stackoverflow.com

 

アップグレード手順は

  • バックアップの作成

  • 既存のmongoDBをアンインストール

monteecristoo.hatenablog.com

  • 新規でmongoDBをインストール

www.mongodb.com

jenssegers / laravel-mongodb ランダムなレコードを取得する

環境:

Laravel@9.52.4

jenssegers/laravel-mongodb@3.9.5

$Posts = Post::raw(function($collection) {
  return $collection->aggregate([
                         ['$sample' => ['size' => 5]],
                         ['$project' => ['title' => 1, 'body' => 1]]
  ]);
});

 

ref:

www.codegrepper.com

github.com


                /*   Get Random Order Items from MongoDB Collection */

Laravel: forPage() で page によって返値が配列になったりオブジェクトになったり

環境:

Laravel@9.52.4

 

事象:

Laravel でforPage() を使ってPagination を実装したがページによってオブジェクトが返ってくる。

 

↓↓正常な挙動(配列が返る)

↓↓異常な挙動(オブジェクトが返る)

↑↑(indexがfilter()により抜けがある)

solution)

同じロジックでpaginate していたがfilter処理をかましていたので異常な挙動な時はfilter が効いていた。collection->filter() で返る値も配列だが index が抜けているとオブジェクトとしてレスポンスを返してしまう。

したがってindex をつめる必要がある。

pagenate処理中にfilter()関数を使うなら常に結果の$filteredに

$filtered->values() でindexを詰める必要がある。

 

mongoDB の効率的なデータベース設計 ChatGPT曰く

>>> 頻繁に検索するならフラットに、そうでなくてかつデータの関連性を維持したいならネストもあり。

>>> 検索対象が小規模ならメンテナンスのことを考えてアプリケーション側の処理のしやすさを優先させてもいいかも。