我在使用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;
答案 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参数的品味。