2013-08-28 42 views
1

如何使用C++驅動程序在輔助節點上執行彙總框架任務?輔助節點上的MongoDB匯聚框架

Here`s總是執行主節點上的一個示例:

DBClientConnection c; 
bo res; 

vector<bo> pipeline; 
pipeline.push_back(BSON("$match" << BSON("firstName" << "Stephen"))); 

c.connect("localhost:12345"); 
c.runCommand("test", BSON("aggregate" << "people" << "pipeline" << pipeline), res); 

cout << res.toString() << endl; 

我需要執行它的次級。

+0

你能舉一個例子,說明你有什麼以及你想從中得到什麼?這是一個非常模糊的問題。 – Eumcoz

+0

@Eumcoz,我編輯了我的問題並提供了示例。 – Lonelius

回答

0

儘管我沒有使用MongoDB的C++驅動程序,但通過簡單地將讀取首選項設置爲輔助,可以輕鬆地在輔助上運行聚合。對於例如在外殼:

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 
... 

注意,這是適用於分片的MongoDB集羣的次級爲好。

來源:This post關於如何執行輔助彙總。