mongodb Agg java,MongoDB Aggregration框架和Java驱动程序使$或条件工作

I am working on a method that queries a mongoDB using the aggregator framework. I have built up the aggregate but I keep getting the following exception:

Pipeline::run(): unrecognized pipeline op \"$or"

If I understand correctly when you append or add DBObjects to the query they are implicitly added as and operations. I may be really tired right now but I can't think of a way to or two conditions with the aggregation framework.

The following is a snippet of my code:

DBObject matchCriteriaTransmitter = new BasicDBObject("$match",

new BasicDBObject("someKey": "someValue").

append("someKey": "someValue"));

DBObject matchCriteriaReceiver = new BasicDBObject("$match",

new BasicDBObject("someKey": "someValue").

append("someKey": "someValue"));

BasicDBList or = new BasicDBList();

or.add(matchCriteriaTransmitter);

or.add(matchCriteriaReceiver);

DBObject matchCriteria = new BasicDBObject("$or", or);

DBObject sortCriteria = new BasicDBObject("$sort",

new BasicDBObject("compoundIndex.scenarioDtg", -1));

DBObject limitCriteria = new BasicDBObject("$limit", 1);

DBCollection collection = dao.getCollection();

AggregationOutput output = collection.aggregate(matchCriteria, sortCriteria, limitCriteria);

Any insight is greatly appreciated!

解决方案

Check the docs you likely to use $or as a pipeline operator but there is no such operator: DOC

INstead you can construct an $match operator which is inside can contain an or clause

Something like this in shell:

db.collection.aggregate({$match:{$or:[{someKey:'someValue'},{someOtherKey:'someOtherValue'}]}})

What you have to change is something like this in JAVA:

Change this:

DBObject matchCriteria = new BasicDBObject("$or", or);

To this:

DBObject orCriteria = new BasicDBObject("$or", or);

DBObject matchCriteria = new BasicDBObject("$match", orCriteria);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值