Несмотря на то, что я не работал с драйвером C++ для MongoDB, запуск агрегатов на вторичной основе легко возможен, просто установив предпочтение чтения вторичным. Напр. на корпусе:
mongo -u admin -p <pwd> --authenticationDatabase admin --host
RS-repl0-0/server-1.servers.example.com:27017,server-2.servers.example.com:27017
RS-repl0-0:PRIMARY> use test
switched to db test
RS-repl0-0:PRIMARY> db.setSlaveOk() // Ok to run commands on a slave
RS-repl0-0:PRIMARY> db.getMongo().setReadPref('secondary') // Set read pref
RS-repl0-0:PRIMARY> db.getMongo().getReadPrefMode()
secondary
RS-repl0-0:PRIMARY> db.zips.aggregate([
... { $group: { _id: "$state", totalPop: { $sum: "$pop" } } },
... { $match: { totalPop: { $gte: 10*1000*1000 } } }
... ])
{ "_id" : "CA", "totalPop" : 29754890 }
{ "_id" : "FL", "totalPop" : 12686644 }
...
можно проверить с MongoDB регистрирует, что это действительно побежал на вторичный:
...
2016-12-05T06:20:14.783+0000 I COMMAND [conn200] command test.zips command: aggregate { aggregate: "zips", pipeline: [ { $group: { _id: "$state", totalPop: { $sum: "$pop" } } }, {
$match: { totalPop: { $gte: 10000000.0 } } } ], cursor: {} } keyUpdates:0 writeConflicts:0 numYields:229 reslen:338 locks:{ Global: { acquireCount: { r: 466 } }, Database: { acquire
Count: { r: 233 } }, Collection: { acquireCount: { r: 233 } } } protocol:op_command 49ms
...
Обратите внимание, что это применимо на второстепенных маховых одного sharded кластера MongoDB, а также.
Источник: This post о том, как выполнить агрегацию на вторичных носителях.
Можете ли вы привести пример того, что у вас есть и что вы хотите получить от него? Это очень неопределенный вопрос. – Eumcoz
@Eumcoz, я редактировал мой вопрос и приводил пример. – Lonelius