0

次の形式の Java Mongo Collection があります。

{
"field1": ["f1","f2"],
"field2": ["g1","g2"],        
    "Ans": a1
} 
{
    "field1": ["f4","f5"],
    "field2": ["g5","g6"],        
        "Ans": a2
} 
{
    "field1": ["f1","f6"],
    "field2": ["g2","g3"],        
        "Ans": a3
} 

field1 と field2 で個別に「OR」条件を実行する
必要があります。結果から行を選択する必要があります。
例: f1,f5,g2,g3 は、取得する入力です。
フィールド 1 で f1、f5 を使用して実行または調整する必要があるため、必要な 3 つの行すべてを取得する
か、フィールド 2 で g、g3 を使用して調整する必要があるため、実行中に 1 番目と 3 番目の行
を取得し、必要な両方を調整します。 1行目と3行目だけを取得します。
以下は、使用しているコードです

        DBObject query1 = new BasicDBObject("field1","f1");  
        DBObject query2 = new BasicDBObject("field1","f5");  
        BasicDBList condtionalOperator = new BasicDBList();
        condtionalOperator.add(query1);
        condtionalOperator.add(query2);
        DBObject query = new BasicDBObject("$or", condtionalOperator);    

フィールド 2 に対する同様の OR クエリと、その結果に対する And クエリは
、かなり長いことがわかります。これよりも簡単なコードを知っている人はいますか?

4

1 に答える 1

0

(Mongo シェル JavaScript 構文を使用して応答しています。これは、Java よりも少し冗長であるためです。同等の Java は簡単に作成できるはずです。)

db.collection.find({$and:[
    {field1:{$in:["f1","f5"]}},
    {field2:{$in:["g1","g3"]}}
]});

演算子は$in基本的に OR 演算を行うため、 の最初のオペランドは$andと本質的に同等{$or:[{field1:"f1"},{field1:"f5"}]}です。

于 2012-10-08T19:09:17.617 に答える