2014-09-18 5 views
2

Я хочу, чтобы перевести следующий скрипт (MongoDB версия оболочки: 2.6.1) на языке Си ++MongoDb общая сумма C++

db.account.aggregate([{$group: { _id:null, totalAmount: { $sum: "$amount" },count: { $sum: 1 }}}]) 

У меня попробовать следующий код:

 void test1(mongo::DBClientConnection& c) 
    { 
     BSONObj res; 

     BSONArray pipeline = BSON_ARRAY( 
        BSON("$group" << 
         BSON("_id" << "null") << 
         BSON("totalAmount" << BSON("$sum" << "$amount"))<< 
         BSON("count" << BSON("$sum" << 1)) 
         ) 
       ); 

     c.runCommand("test",BSON("aggregate" << "account" << "pipeline" << pipeline),res); 

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

Над кодом приведет к ошибке компилятора!

 void test2(mongo::DBClientConnection& c) 
    { 
     BSONObj res; 

     vector<BSONObj> pipeline; 
     pipeline.push_back(BSON("$group" << BSON("_id" << "null"))); 
     pipeline.push_back(BSON("totalAmount" << BSON("$sum" << "$amount"))); 

     c.runCommand("test", BSON("aggregate" << "account" << "pipeline" << pipeline), res); 

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

Выше кода вызовет ошибку времени выполнения!

Кто-нибудь может мне помочь? Спасибо!

ответ

3

ммм .. Когда я был казнен, этот код успешно работает. У меня есть доказательства выстрела, но «Стек переполнение Ответ» не позволяет мне загружать фотографии. :(

Я предполагаю, что это небольшая ошибка синтаксиса. Ваша сумма добавляется быть внутри групп? Проверить свой код.

Ниже мой тестовый код:

[код]

DBClientConnection c; 
BSONObj res; 

vector<BSONObj> pipeline; 
c.connect("127.0.0.1:27017"); 
pipeline.push_back(BSON("$group" << BSON("_id" << "null" << "totalAmount" << BSON("$sum" << "$amount")))); 

c.runCommand("security", BSON("aggregate" << "nac" << "pipeline" << pipeline), res); 

cout << "Succeed!!!" << endl; 
cout << "collection1: " << res.jsonString() << endl; 

return 0; 

[Execute]

~/бен] $ ./test.exe

Succeed !!!

collection1: {результат: [{_id: "нуль", totalAmount: 426}], хорошо: 1,0}

~/бен] $

+0

Этот код работал отлично! Но [BSONArray pipe = BSON_ARRAY (...);] вызвал ошибку времени выполнения! Большое спасибо за вашу большую помощь ! –

0

Я плохо разбираюсь в английском, но могу вам помочь.

1)

void test1(mongo::DBClientConnection& c) 
{ 
    BSONObj res; 

    BSONArray pipeline = BSON_ARRAY( 
       BSONArray pipeline = BSON_ARRAY( 
       BSON("$group" << 
        BSON("_id" << "null" << "totalAmount" << BSON("$sum" << "$amount"))<< "count" << BSON("$sum" << 1) 
        ) 
      ); 

    c.runCommand("test",BSON("aggregate" << "account" << "pipeline" << pipeline),res); 

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

2)

void test2(mongo::DBClientConnection& c) 
{ 
    BSONObj res; 

    vector<BSONObj> pipeline; 
    pipeline.push_back(BSON("$group" << BSON("_id" << "null" << "totalAmount" << BSON("$sum" << "$amount")))); 

    c.runCommand("test", BSON("aggregate" << "account" << "pipeline" << pipeline), res); 

    cout << collection1<<res.toString() << endl; 
} 
+0

Большое спасибо за Ваш ответ! Вышеупомянутый код также вызовет ошибку времени выполнения. Сообщение об ошибке выглядит следующим образом: 2014-09-18T13: 37: 49.034 + 0800 Ошибка утверждения p src/mongo/client/dbclientinterface.h 1283 завершение вызова после вызова экземпляра 'mongo :: AssertionException' what() : assertion src/mongo/client/dbclientinterface.h: 1283 Aborted –

+0

Возможно, параметр c (DBClientConnection) не называется connect(). добавить код: c.connect ("127.0.0.1": 27017 "); –

+0

Благодарю вас! Вы правы! Но он по-прежнему показывает сообщение следующим образом: {errmsg:" исключение: объект спецификации этапа трубопровода должен содержат только одно поле. ", code: 16435, ok: 0.0} –

Смежные вопросы