如何处理mongodb中预先创建的2个BSONObj之间的逻辑运算

时间:2014-09-10 13:45:50

标签: mongodb mongodb-query

我是mongodb的新手。我想使用c ++驱动程序执行查询(a = 3 OR b = 5作为条件)。

我可以通过BSONObjBuilder为每个a = 3和b = 5分别创建两个BSONObj对象,如下所示。

 mongo::BSONObjBuilder builder = new mongo::BSONObjBuilder;
 mongo::BSONObjBuilder inner = new BSONObjBuilder(builder->subobjStart(condition));
 inner->append("$gte", value);
 inner->append("$lte", value);

 mongo::BSONObj obj = builder.obj();

所以我有2个不同的BSONObj。我可以成功运行它们。但是我如何使用$或$和逻辑运算符组合这些对象。

1 个答案:

答案 0 :(得分:2)

假设您的目标是查询{$or: [{a: 3}, {a: 5}]},您可以使用MongoDB C ++驱动程序构建它,如下所示:

mongo::BSONObjBuilder queryBuilder;
mongo::BSONArrayBuilder orClause(queryBuilder.subarrayStart("$or"));
mongo::BSONObjBuilder firstClause(orClause.subobjStart()).append("a", 3).done();
mongo::BSONObjBuilder secondClause(orClause.subobjStart()).append("a", 5).done();
orClause.done();
mongo::BSONObj query(queryBuilder.obj());

使用OR帮助程序的方式要简单得多:

mongo::BSONObj query(OR(BSON("a" << 3), BSON("a" << 5));