2012-10-08 3 views
0

J'ai la collection Java Mongo au format suivant.Comment utiliser la condition AND & OR dans la collection de tableaux JOB mongo db

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

que je dois faire le « OU » condition dans champ1 et champ2 séparément
A partir du résultat que je dois faire et de l'état pour sélectionner la ligne.
Par exemple: f1, f5, g2, g3 est l'entrée que j'obtiens.
que je dois faire ou condtion dans le champ 1 avec f1, f5 donc je vais obtenir toutes les trois lignes
que je dois faire ou condtion dans le domaine 2 avec g, g3 donc je vais obtenir 1er et 3e rangs
tout en faisant et l'état des deux je dois obtenir seulement 1ère et 3ème rangée.
follwing est le code im en utilisant

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

similaires ou requête pour le champ 2 et requête et pour leur résultat
Je sais que assez long. Quelqu'un connaît un code simple que celui-ci?

Répondre

0

(je réponds en utilisant la syntaxe JavaScript shell mongo, car il est un peu moins bavard que Java. L'équivalent Java devrait être facile à produire.)

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

L'opérateur $in fait essentiellement une opération OU , donc le premier opérande du $and est essentiellement équivalent à {$or:[{field1:"f1"},{field1:"f5"}]}.

Questions connexes