Browse Source

added support for $or criteria

pull/1/head
Thomas Risberg 15 years ago
parent
commit
7e8b597108
  1. 25
      src/main/java/org/springframework/datastore/document/mongodb/query/BasicQuery.java
  2. 40
      src/main/java/org/springframework/datastore/document/mongodb/query/Criteria.java
  3. 9
      src/main/java/org/springframework/datastore/document/mongodb/query/CriteriaSpec.java
  4. 31
      src/main/java/org/springframework/datastore/document/mongodb/query/OrCriteria.java
  5. 12
      src/main/java/org/springframework/datastore/document/mongodb/query/QueryBuilder.java

25
src/main/java/org/springframework/datastore/document/mongodb/query/BasicQuery.java

@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
package org.springframework.datastore.document.mongodb.query;
import com.mongodb.DBObject;
import com.mongodb.util.JSON;
public class BasicQuery implements Query {
private DBObject dbo = null;
public BasicQuery(String query) {
super();
this.dbo = (DBObject) JSON.parse(query);
}
public BasicQuery(DBObject dbo) {
super();
this.dbo = dbo;
}
public DBObject getQueryObject() {
return dbo;
}
}

40
src/main/java/org/springframework/datastore/document/mongodb/query/QueryCriterion.java → src/main/java/org/springframework/datastore/document/mongodb/query/Criteria.java

@ -9,7 +9,7 @@ import org.springframework.datastore.document.InvalidDocumentStoreApiUageExcepti @@ -9,7 +9,7 @@ import org.springframework.datastore.document.InvalidDocumentStoreApiUageExcepti
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
public class QueryCriterion {
public class Criteria implements CriteriaSpec {
private QueryBuilder qb = null;
@ -18,13 +18,18 @@ public class QueryCriterion { @@ -18,13 +18,18 @@ public class QueryCriterion {
private Object isValue = null;
public QueryCriterion(QueryBuilder qb) {
public Criteria(QueryBuilder qb) {
super();
this.qb = qb;
}
public QueryCriterion is(Object o) {
public Criteria and(String key) {
return qb.find(key);
}
public Criteria is(Object o) {
if (isValue != null) {
throw new InvalidDocumentStoreApiUageException("Multiple 'is' values declared.");
}
@ -32,37 +37,37 @@ public class QueryCriterion { @@ -32,37 +37,37 @@ public class QueryCriterion {
return this;
}
public QueryCriterion lt(Object o) {
public Criteria lt(Object o) {
criteria.put("$lt", o);
return this;
}
public QueryCriterion lte(Object o) {
public Criteria lte(Object o) {
criteria.put("$lte", o);
return this;
}
public QueryCriterion gt(Object o) {
public Criteria gt(Object o) {
criteria.put("$gt", o);
return this;
}
public QueryCriterion gte(Object o) {
public Criteria gte(Object o) {
criteria.put("$gte", o);
return this;
}
public QueryCriterion in(Object... o) {
public Criteria in(Object... o) {
criteria.put("$in", o);
return this;
}
public QueryCriterion nin(Object... o) {
public Criteria nin(Object... o) {
criteria.put("$min", o);
return this;
}
public QueryCriterion mod(Number value, Number remainder) {
public Criteria mod(Number value, Number remainder) {
List<Object> l = new ArrayList<Object>();
l.add(value);
l.add(remainder);
@ -70,30 +75,30 @@ public class QueryCriterion { @@ -70,30 +75,30 @@ public class QueryCriterion {
return this;
}
public QueryCriterion all(Object o) {
public Criteria all(Object o) {
criteria.put("$is", o);
return this;
}
public QueryCriterion size(Object o) {
public Criteria size(Object o) {
criteria.put("$is", o);
return this;
}
public QueryCriterion exists(boolean b) {
public Criteria exists(boolean b) {
return this;
}
public QueryCriterion type(int t) {
public Criteria type(int t) {
return this;
}
public QueryCriterion not() {
public Criteria not() {
criteria.put("$not", null);
return this;
}
public QueryCriterion regExp(String re) {
public Criteria regExp(String re) {
return this;
}
@ -105,6 +110,9 @@ public class QueryCriterion { @@ -105,6 +110,9 @@ public class QueryCriterion {
return qb.build();
}
/* (non-Javadoc)
* @see org.springframework.datastore.document.mongodb.query.Criteria#getCriteriaObject(java.lang.String)
*/
public DBObject getCriteriaObject(String key) {
DBObject dbo = new BasicDBObject();
boolean not = false;

9
src/main/java/org/springframework/datastore/document/mongodb/query/CriteriaSpec.java

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
package org.springframework.datastore.document.mongodb.query;
import com.mongodb.DBObject;
public interface CriteriaSpec {
DBObject getCriteriaObject(String key);
}

31
src/main/java/org/springframework/datastore/document/mongodb/query/OrCriteria.java

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
package org.springframework.datastore.document.mongodb.query;
import org.bson.types.BasicBSONList;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
public class OrCriteria implements CriteriaSpec {
Query[] queries = null;
public OrCriteria(Query[] queries) {
super();
this.queries = queries;
}
/* (non-Javadoc)
* @see org.springframework.datastore.document.mongodb.query.Criteria#getCriteriaObject(java.lang.String)
*/
public DBObject getCriteriaObject(String key) {
DBObject dbo = new BasicDBObject();
BasicBSONList l = new BasicBSONList();
for (Query q : queries) {
l.add(q.getQueryObject());
}
dbo.put(key, l);
return dbo;
}
}

12
src/main/java/org/springframework/datastore/document/mongodb/query/QueryBuilder.java

@ -7,15 +7,17 @@ import com.mongodb.DBObject; @@ -7,15 +7,17 @@ import com.mongodb.DBObject;
public class QueryBuilder implements Query {
private LinkedHashMap<String, QueryCriterion> criteria = new LinkedHashMap<String, QueryCriterion>();
private LinkedHashMap<String, CriteriaSpec> criteria = new LinkedHashMap<String, CriteriaSpec>();
public QueryCriterion find(String key) {
QueryCriterion c = new QueryCriterion(this);
public Criteria find(String key) {
Criteria c = new Criteria(this);
this.criteria.put(key, c);
return c;
}
public void or(Query... queries) {
public QueryBuilder or(Query... queries) {
this.criteria.put("$or", new OrCriteria(queries));
return this;
}
public FieldSpecification fields() {
@ -41,7 +43,7 @@ public class QueryBuilder implements Query { @@ -41,7 +43,7 @@ public class QueryBuilder implements Query {
public DBObject getQueryObject() {
DBObject dbo = new BasicDBObject();
for (String k : criteria.keySet()) {
QueryCriterion c = criteria.get(k);
CriteriaSpec c = criteria.get(k);
DBObject cl = c.getCriteriaObject(k);
dbo.putAll(cl);
}

Loading…
Cancel
Save