これが問題です。remote に接続されているローカルmongos
インスタンスがありますmongod
。リモート DB は基本パスワード認証を使用します。シンプルな Scala アプリケーションを使用して、特定のコレクションの ChangeStream ウォッチャーをセットアップしようとしています。実際のコードは次のようになります。
private val mongo = new MongoClient(
new ServerAddress("localhost", 27017),
MongoCredential.createCredential("username", "myDB", "password".toCharArray),
MongoClientOptions.builder().addServerListener(ServerStateListener).build()
)
private val collection = mongo
.getDatabase(DB)
.getCollection("someObjectsCollection")
private val ch = collection
.watch()
.fullDocument(FullDocument.UPDATE_LOOKUP)
.iterator()
.fullDocument(FullDocument.UPDATE_LOOKUP)
それはライン上で壊れます:
Exception in thread "main" com.mongodb.MongoCommandException: Command failed with error 13: 'not authorized on myDB to execute command { aggregate: "someObjectsCollection", pipeline: [ { $changeStream: { fullDocument: "updateLookup" } } ], cursor: {}, $db: "myDB", $clusterTime: { clusterTime: Timestamp(1524064297, 2), ....
特定のユーザー資格情報mongo shell
がリモート DB とローカルの両方で機能するため、混乱しますmongos
。さらに、そのアプリケーション内でコレクションを使用して他のアクションを実行しようとしました ( などcollection.count()
)。ウォッチャーをセットアップしようとすると、問題が発生します。