MongoDB v4.0
の最も驚くべき機能をインストールしましたトランザクションドライバーとしてmongodb
3.1を使用してNodejsに。
トランザクションセッションを使用しようとすると、このエラーに直面しました。
MongoError:トランザクション番号は、レプリカセットメンバーまたはmongosでのみ許可されます。
それは何ですか、どうすればそれを取り除くことができますか?
どんな提案も大歓迎です。
Transactions
は、間違いなくMongoDB 4.0
の最もエキサイティングな新機能です。しかし、残念ながら、MongoDBをインストールして実行するためのほとんどのツールは、レプリカセットではなくスタンドアロンサーバーを起動します。スタンドアロンサーバーでセッションを開始しようとすると、このエラーが発生します。
トランザクションを使用するには、MongoDBレプリカセットが必要であり、開発のためにレプリカセットをローカルで開始することは、複雑なプロセスです。新しいrun-rs npm module
を使用すると、レプリカセットを簡単に開始できます。 run-rsを実行するだけでレプリカセットを起動できます。run-rsは正しいバージョンのMongoDBをインストールします。
Run-rsには、Node.jsとnpm以外の外部依存関係はありません。 Docker、homebrew、APT、Python、またはMongoDBをインストールする必要はありません。
npm's -g
フラグを使用してrun-rsをグローバルにインストールします。 package.json
ファイルのdevDependenciesにrun-rsをリストすることもできます。
npm install run-rs -g
次に、-versionフラグを指定してrun-rsを実行します。 Run-rsはMongoDB v4.0.0をダウンロードします。心配しないでください。既存のMongoDBインストールが上書きされることはありません。
run-rs -v 4.0.0 --Shell
次に、接続文字列でreplicaSet=rs
を使用します。
詳細については、こちらをご覧ください こちら 。
私はこの問題と何週間も戦ってきました。結論をお伝えします。シャードクラスターでトランザクションを使用できるようにするには、クラスターで少なくともMongoDB 4.2を実行する必要があります。クラスターがシャーディングされていない場合、4.0から。私はサブ依存関係としてmongodb NodeJSドライバーを持つライブラリを使用していました。バージョン3.3.xのこのドライバーは、バージョン4.0.4のシャードされたMongoDBクラスターに対して失敗します。私にとっての解決策は、クラスターを4.2バージョンに更新することでした。