Mongo数据库查询 - 如果在c ++代码中实现条件,则聚合$ cond

时间:2018-02-23 08:43:41

标签: c++ mongodb mongodb-query bson

我有一个mongo数据库查询,如下所示

db.getCollection('ABC_COLLECTION_01').aggregate ([{ "$group" : { "_id" : 0, "total" : { "$sum" : "$columA" }, "total_sub" : { "$sum" : {$cond:{ if: { $gte: [ "$columnB", new ISODate("2018-01-01T04:58:09.000+0100") ] }, then: "$columA", else: 0 }}} }}])

此查询工作正常。如果我在ABC_COLLECTION_01上运行它,它将返回结果(仅用于示例)

  

总计= 250& total_sub = 120

现在我必须使用mongo :: BSONArrayBuilder在C ++代码中编写此查询,如下所示

//Calculate 2 sum
aBuilder.append(BSON("$group"<<BSON("_id"<<0
                                        <<"total"<<BSON("$sum"<<'$' +columA)
                                        <<"total_sub"<<BSON("$sum"<<'$cond'<<'if'<<'$' +columB<<"$gte"<<rmsmongo::utils::Adaptor::ToMongoDate(StartTime,true)<<'then'<<'$' +columA<<'else'<<0))));
mongo::BSONArray New_AggregationQuery = aBuilder.arr();
std::auto_ptr<dsclient::Cursor> Cursor = _MyCollection.aggregate(New_AggregationQuery, dsclient::Option_aggregate().retry(dsclient::Retry(dsclient::ExponentialRetry, 2)).maxTimeMS(200000));

如果你看到我为$ total_sub编写的$ cond在C ++代码中是错误的 - 那就不行了。 你能帮我纠正一下吗? 提前致谢

1 个答案:

答案 0 :(得分:0)

请注意,您在此处使用的旧版C ++驱动程序已停止使用。我不能强烈建议您立即切换到同一个仓库的主分支上找到的新mongocxx驱动程序。它提供了显着的优势,其中最重要的是它得到了积极维护。

也就是说,如果仔细观察,可以看到工作查询中的if表达式有一个子文档,但在C ++代码中,您没有启动新的BSON子文档。可能还有其他错误。

说真的,我真的建议你停止工作并转移到新的驱动程序。传统驱动程序中的任何错误或不符合项(或者您甚至使用26compat)都将永远不会修复。