1

私のデータベースのサンプル レコードは次のようになります。

{
    "_id" : 2,
    "name" : "Corliss Zuk",
    "scores" : [
            {
                    "type" : "exam",
                    "score" : 87.53859552156015
            },
            {
                    "type" : "quiz",
                    "score" : 24.49132971110967
            },
            {
                    "type" : "homework",
                    "score" : 99.24881912510654
            }
    ]

}

宿題の点数が 90 より大きいか、試験の点数が 50 より小さいすべてのレコードを選択しようとしています。OR 条件は次のようになります。

 DBObject clause1 = new BasicDBObject("scores.type", "homework").append("scores.score", new BasicDBObject("$gt", 90)); 
    DBObject clause2 = new BasicDBObject("scores.type", "exam").append("scores.score", new BasicDBObject("$lt", 50));    
    BasicDBList or = new BasicDBList();
    or.add(clause1);
    or.add(clause2);
    DBObject query = new BasicDBObject("$or", or);

これは、スコアが > 90 または < 50 であるすべてのレコードをピックアップしていますが、調査されているスコアが宿題のスコアまたは試験のスコアである必要があるという条件に関連していません。スコアをタイプに関連付けて、その値を調べる条件がありません。

どんな助けでも大歓迎です。

ありがとう、ジョン

4

2 に答える 2

2
DBObject clause1 = new BasicDBObject("scores", new BasicDBObject("$elemMatch", new BasicDBObject("type", "homework").append("score", new BasicDBObject("$gt", 90))));
DBObject clause2 = new BasicDBObject("scores", new BasicDBObject("$elemMatch", new BasicDBObject("type", "exam").append("score", new BasicDBObject("$lt", 50))));

このように使用してください。

于 2013-05-29T10:53:51.737 に答える