node.js - node.js 原生 mongodb 驱动程序在运行 db.command({aggregate : . ..}) 时返回 "not master"错误

标签 node.js mongodb aggregation-framework sharding runcommand

mongoShell 和node.js 应用的结果不同。 我的mongodb环境使用的是分片集群。

The result of mongoShell

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

The result of node.js application

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.js mongodb 驱动程序升级到 2.0.27(最新)并将我的应用程序自定义为更改后的 API 后,应用程序运行良好。

感谢您的建议。

关于node.js - node.js 原生 mongodb 驱动程序在运行 db.command({aggregate : . ..}) 时返回 "not master"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29490469/

相关文章:

node.js - 引导微服务时获取 ConfigService 的正确方法

javascript - 如何格式化此关联获取 Sequelize

javascript - 如何 : Produce mongoDB query string for the fields dynamically from a javascript app

Mongodb 从计数函数和聚合管道中给出不同的计数结果

node.js - 我的库支持哪个版本的 Node?

ajax - 如何使用 mongoose.js 合并更新文档?

mongodb - 无法连接到 MongoDB Atlas 集群 : DNSHostNotFound

javascript - Mongoose 模式引用和未定义类型 'ObjectID'

mongodb - Mongodb 聚合不工作

mongodb - 在 MongoDB 中执行 GROUP BY 之前进行排序