2012-06-18 6 views
0

Je suis en train de créer une equivalant de la requête SQL suivante:MongoDB et JAVA - logique OU avec requête Regex

Select * from X where a like 'a%' OR b like 'a%' 

J'ai essayé toutes sortes d'options, mais je continue à obtenir l'erreur suivante:

falsecom.mongodb.MongoException: $or requires nonempty array 

Est-ce que quelqu'un sait comment faire cela?

Merci.

+0

Qu'avez-vous essayé dans Mongo lorsque vous avez reçu cette exception? – jsalonen

+0

Quelle bibliothèque utilisez-vous? Quel est le code de votre requête? – toniedzwiedz

+0

Vous pouvez prendre l'inspiration de cette [1]: http://stackoverflow.com/questions/10620771/how-to-or-few-conditions-in-mongodb-using-java-driver/10620972#10620972 –

Répondre

2

Vous pouvez utiliser la classe QueryBuilder pour rendre le code un peu plus lisible:

Mongo m = new Mongo(); 
    m.setWriteConcern(WriteConcern.SAFE); 
    DBCollection c = m.getDB("test").getCollection("or-test"); 
    c.drop(); 

    c.insert(new BasicDBObject("a", "abba")); 
    c.insert(new BasicDBObject("b", "abba")); 
    c.insert(new BasicDBObject("a", "bbba")); 
    c.insert(new BasicDBObject("b", "bbba")); 

    Pattern pattern = Pattern.compile("^a"); 
    DBObject query = QueryBuilder.start().or(
      QueryBuilder.start("a").regex(pattern).get(), 
      QueryBuilder.start("b").regex(pattern).get() 
      ).get(); 
    System.out.println(c.find(query).count()); 

Ce imprimera "2".