Mongo は 2.0 で使い始めました。頻繁に実行するクエリの一部として、ジョブの実行時に他のコレクションからもデータをプルする map/reduce ジョブを実行します。
mongo 2.4 以降、この機能は削除されました ( http://docs.mongodb.org/manual/release-notes/2.4/#additional-limitations-for-map-reduce-and-where-operations )。 「コードをリファクタリングする」。
では、コードをリファクタリングする方法はありますか? 一般的な質問であることは承知していますが、一般的なアプリケーションを求めています。関連するコレクションとクロスクエリのサイズと用途には十分な多様性があります。
この時点で、db
オブジェクトをサーバー コード スコープに戻すだけのパッチを適用することもできます。次のパッチで十分なようです (はい、これらのセキュリティへの影響があることは理解していますが、シャードも使用していません。依存している機能を取り戻すための最も簡単な方法です):
diff --git a/src/mongo/db/commands/mr.cpp b/src/mongo/db/commands/mr.cpp
index 742392f..225a2b7 100644
--- a/src/mongo/db/commands/mr.cpp
+++ b/src/mongo/db/commands/mr.cpp
@@ -623,6 +623,7 @@ namespace mongo {
void State::init() {
// setup js
_scope.reset(globalScriptEngine->getPooledScope( _config.dbname, "mapreduce" ).release() );
+ _scope->localConnect( _config.dbname.c_str() );
if ( ! _config.scopeSetup.isEmpty() )
_scope->init( &_config.scopeSetup );