mongoShell和node.js应用程序的结果不同。我的mongodb环境使用shard集群。
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应用程序中执行聚合框架查询。
如何在应用程序中执行此查询?
我自己通过升级node.js mongodb驱动程序解决了这个问题。
我在之前的测试中使用了1.4.29版本的mongodb驱动程序。
在1.4.29版本API中,"db.command"不检查有关从机的读取首选项。
所以当我运行我的应用程序时,我遇到了这样的错误。
在将node.jsmongodb驱动程序升级到2.0.27(最新版本)并将我的应用程序定制为更改后的API之后,该应用程序运行得非常好。
谢谢你的建议。