Другое дело, что результат приложения mongoShell и node.js. В моей среде mongodb используется кластер осколков.Собственный драйвер mongodb node.js возвращает ошибку «не master» при запуске db.command ({aggregate: ...})
Результат 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 приложения.
Как выполнить этот запрос в приложении?
Я думаю, вам нужно установить режим «slave okay» в оболочке 'rs.slaveOk()'. Это позволяет оболочке mongo знать, что вы разрешаете чтение из вторичного, и вы можете запросить обычную информацию из вторичных. – chridam
Причина этого в том, что у вас установлено allowdiskUse значение true, а конвейер агрегации работает на вторичном. Вы не можете писать второстепенным в MongoDB. Как выглядит код подключения? Как бит в конструкторе MongoClients – Sammaye