2013-06-27 1 views
0

J'utilise la requête searchQuery ci-dessous pour appliquer une expression régulière.Opérateur logique AND sur deux listes d'opérateurs OU

BasicDBObject searchQuery = new BasicDBObject(); 
Pattern regex; 
BasicDBList or = new BasicDBList(); 
for (String s : statistics) { 
    regex = Pattern.compile(s); 
    DBObject statRegex = new BasicDBObject("_id", regex); 
    or.add(statRegex); 
} 
searchQuery.put("$or", or); 

qui trouve des résultats où le champ _id, a une valeur de l'une des chaînes dans une liste de tableau appelé statistics. (Par exemple « Error », « délai d'attente », ResponseTime » ...).

Comment la base de données que je pourrais interroger via deux listes or. Par exemple, je veux correspondre où le champ _id est égal à une chaîne contenue dans statistics et où le champ name est une chaîne contenue dans networks.

de la lecture d'autres sujets, je pense que la solution pourrait être avec $elemMatch bien que j'ai une compréhension limitée de la façon dont les requêtes avancées travailler dans mongoDB.

Répondre

0

Vous pouvez utiliser $ et et ou en combinaison

test:Mongo > db.test.insert({ _id : "abhi", name : "kumar" }) 
test:Mongo > db.test.find({ $and : [ {$or : [ { _id : /abhi/ } ]}, {$or : [ { name : /kumar/ } ] } ] }) 
{ "_id" : "abhi", "name" : "kumar" }