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 回答