c ++中的MongoDB $ group命令

时间:2014-03-27 14:45:58

标签: c++ mongodb qt aggregation-framework

我在使用mongodb的 $ group 命令在c ++(Qt)中工作时遇到问题

文档的示例代码按预期工作并返回结果:

db.article.aggregate(
    { "$group" : {
        "_id" : "$author",
        "docsPerAuthor" : { "$sum" : 1 }
    }}
);`

但是,转换为c ++会返回一个空的结果集但没有错误:

QString queryCommand =  "{ group : {"
                          "_id : \"$author\", "
                          "docsPerAuthor : {$sum : 1} "
                        "}}";

BSONObj bson_query_result = m_mongoConnection.findOne("data.collection",
                fromjson(queryCommand.toStdString().c_str()));


std::cout << "Output: " << bson_query_result.toString() << std::endl;

1 个答案:

答案 0 :(得分:2)

通过“runCommand”方法调用聚合,该方法获取数据库名称和包含命令和集合的BSONObj,以及作为数组的实际管道。最后一个参数是响应对象。完整documentation

假设您有一个DBClientConnection m_mongoConnection并使用“test”数据库:

 BSONObj res;

 BSONArray pipeline = BSON_ARRAY( 
     BSON( "$group" << 
         BSON( "_id" << "$author" ) << 
         BSON( "docsPerAuthor" <<
             BSON( "$sum" << 1 )
         )
     )
 );

 m_mongoConnection.runCommand( 
     "test", BSON( 
        "aggregate" << "article" << "pipeline" << pipeline 
     ), 
     res 
 );

 cout << res.toString() << endl

取决于您个人对如何构建BSON参数的品味。