3

mongoShell と node.js を適用した結果とは異なります。私の mongodb 環境ではシャード クラスターを使用しています。

mongoShell の結果

mongos> db.runCommand({aggregate : "collection", pipeline : my_pipeline(), allowDiskUse : true});
{
    "result" : [ ],
    "ok" : 1,
    "$gleStats" : {
        "lastOpTime" : Timestamp(1428399959, 408),
        "electionId" : ObjectId("552363d7ddfce783509094e5")
    }
}

node.jsの適用結果

var mongodb = require('mongodb');
var mongoClient = new mongodb.MongoClient(...);
mongoClient.open(function (err, mongoClient) {
    var db = mongoClient.db(...);
    db.command({aggregate : "collection", pipeline : my_pipeline(),      allowDiskUse : true}, function (err) {
        ...
    });
});

-->

MongoError: exception: failed to create temporary $out collection 'db.tmp.agg_out.12': { note: "from execCommand", ok: 0.0, errmsg: "not master" }

node.js アプリケーションで集計フレームワークのクエリを実行したい。

アプリケーションでこのクエリを実行するにはどうすればよいですか?

4

1 に答える 1

3

node.js mongodb ドライバーをアップグレードすることで、自分で解決しました。

以前のテストでは、バージョン 1.4.29 の mongodb ドライバーを使用しました。

1.4.29 バージョンの API では、「db.command」はスレーブに関する読み取り設定をチェックしません。

そのため、アプリケーションを実行すると、そのようなエラーが発生しました。

node.js mongodb ドライバーを 2.0.27 (最新) にアップグレードし、変更された API に合わせてアプリケーションをカスタマイズした後、アプリケーションは非常にうまく動作します。

ご提案いただきありがとうございます。

于 2015-04-08T04:00:08.537 に答える