0

アグリゲーターフレームワークを使用してmongoDBを照会する方法に取り組んでいます。集計を作成しましたが、次の例外が引き続き発生します。

Pipeline::run(): 認識されないパイプライン op \"$or"

DBObjectsをクエリに追加または追加するときに正しく理解できれば、それらは暗黙的に操作として追加されます。私は今とても疲れているかもしれませんが、集約フレームワークを使用して条件を 1 つまたは 2 つ考え出すことはできません。

以下は私のコードのスニペットです:

    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);

どんな洞察も大歓迎です!

4

2 に答える 2

3

$or をパイプライン演算子として使用する可能性が高いドキュメントを確認しますが、そのような演算子はありません: DOC

代わりに、内部にある $match 演算子を作成して or 句を含めることができます

シェルで次のようなもの:

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

変更する必要があるのは、JAVA では次のようなものです。

これを変える:

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

これに:

DBObject orCriteria = new BasicDBObject("$or", or);
DBObject matchCriteria = new BasicDBObject("$match", orCriteria);
于 2013-09-11T11:43:30.617 に答える