2012-10-08 24 views
0

我使用以下格式的Java Mongo Collection。如何在JAVA中使用AND&OR条件mongo db数组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 
} 

我需要做的“OR”条件字段1,并分别
从结果我需要做的条件来选择行字段2。
例如:f1,f5,g2,g3是我得到的输入。
我需要在现场1与F1做或condtion,F5,所以我会得到所有的三排
我需要在现场2相克做或condtion,G3,所以我会得到第1和第3行
,而这样做我只需要获得第一和第三排的条件。
Follwing是使用

 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和查询我知道它很长的代码IM。任何人都知道简单的代码比这个吗?

回答

0

(我使用的是蒙戈外壳JavaScript语法响应,因为这是一个有点比Java更简洁。相应的Java应该很容易产生。)

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

$in运营商基本上没有或操作,所以$and的第一个操作数基本上相当于{$or:[{field1:"f1"},{field1:"f5"}]}