web-dev-qa-db-ja.com

Mongodb v4.0トランザクション、MongoError:トランザクション番号はレプリカセットメンバーまたはmongosでのみ許可されます

MongoDB v4.0の最も驚くべき機能をインストールしましたトランザクションドライバーとしてmongodb 3.1を使用してNodejsに。

トランザクションセッションを使用しようとすると、このエラーに直面しました。

MongoError:トランザクション番号は、レプリカセットメンバーまたはmongosでのみ許可されます。

それは何ですか、どうすればそれを取り除くことができますか?

どんな提案も大歓迎です。

12
jafar shemshadi

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を使用します。

詳細については、こちらをご覧ください こちら

12
Majid Parvin

私はこの問題と何週間も戦ってきました。結論をお伝えします。シャードクラスターでトランザクションを使用できるようにするには、クラスターで少なくともMongoDB 4.2を実行する必要があります。クラスターがシャーディングされていない場合、4.0から。私はサブ依存関係としてmongodb NodeJSドライバーを持つライブラリを使用していました。バージョン3.3.xのこのドライバーは、バージョン4.0.4のシャードされたMongoDBクラスターに対して失敗します。私にとっての解決策は、クラスターを4.2バージョンに更新することでした。

src: https://www.bmc.com/blogs/mongodb-transactions/

0
M. Gleria