0

I am trying to create an equivalant of the following SQL query:

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

I tried all sorts of options but I keep getting the following error:

falsecom.mongodb.MongoException: $or requires nonempty array

Does anyone know how to do this?

Thanks.

toniedzwiedz
  • 17,895
  • 9
  • 86
  • 131
karel lahmy
  • 397
  • 1
  • 5
  • 15

1 Answers1

2

You can use the QueryBuilder class to make the code a bit more readable:

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

This will print "2".

jyemin
  • 3,743
  • 23
  • 16