diff --git a/pom.xml b/pom.xml
index 8b3bb07..08605dc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
UTF-8
2.4.0-SNAPSHOT
2.4.0-SNAPSHOT
- 2.9.1
+ 2.11.2
diff --git a/src/main/java/be/datablend/blueprints/impls/mongodb/MongoDBGraph.java b/src/main/java/be/datablend/blueprints/impls/mongodb/MongoDBGraph.java
index 9937e3b..9a0c1f1 100755
--- a/src/main/java/be/datablend/blueprints/impls/mongodb/MongoDBGraph.java
+++ b/src/main/java/be/datablend/blueprints/impls/mongodb/MongoDBGraph.java
@@ -264,6 +264,6 @@ private DBCollection getCollection(Class elementClass) {
}
public GraphQuery query() {
- return new DefaultGraphQuery(this);
+ return new MongoDBGraphQuery(this);
}
}
diff --git a/src/main/java/be/datablend/blueprints/impls/mongodb/MongoDBGraphQuery.java b/src/main/java/be/datablend/blueprints/impls/mongodb/MongoDBGraphQuery.java
new file mode 100644
index 0000000..2b6b9d7
--- /dev/null
+++ b/src/main/java/be/datablend/blueprints/impls/mongodb/MongoDBGraphQuery.java
@@ -0,0 +1,120 @@
+package be.datablend.blueprints.impls.mongodb;
+
+import be.datablend.blueprints.impls.mongodb.MongoDBGraph;
+import com.mongodb.BasicDBList;
+import com.mongodb.DBCursor;
+import com.mongodb.QueryBuilder;
+import com.tinkerpop.blueprints.Contains;
+import com.tinkerpop.blueprints.Edge;
+import com.tinkerpop.blueprints.Graph;
+import com.tinkerpop.blueprints.Vertex;
+import com.tinkerpop.blueprints.util.DefaultGraphQuery;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author Andreas Bannach (andreas.bannach@igd.fraunhofer.de)
+ */
+public class MongoDBGraphQuery extends DefaultGraphQuery {
+
+ private final MongoDBGraph graph;
+
+ public MongoDBGraphQuery(MongoDBGraph graph) {
+ super(graph);
+
+ this.graph = graph;
+ }
+
+ @Override
+ public Iterable vertices() {
+
+ if (limit == 0) {
+ return Collections.emptyList();
+ }
+
+ QueryBuilder queryBuilder = QueryBuilder.start();
+ addFilters(queryBuilder);
+
+ DBCursor cursor = graph.getVertexCollection().find(queryBuilder.get());
+ if (limit > 0 && limit < Long.MAX_VALUE) {
+ cursor.limit(limit);
+ }
+ return new MongoDBIterable(cursor, graph, Vertex.class);
+ }
+
+ @Override
+ public Iterable edges() {
+
+ if (limit == 0) {
+ return Collections.emptyList();
+ }
+
+ QueryBuilder queryBuilder = QueryBuilder.start();
+ addFilters(queryBuilder);
+
+ DBCursor cursor = graph.getEdgeCollection().find(queryBuilder.get());
+ if (limit > 0 && limit < Long.MAX_VALUE) {
+ cursor.limit(limit);
+ }
+ return new MongoDBIterable(cursor, graph, Edge.class);
+ }
+
+ private void addFilters(QueryBuilder queryBuilder) {
+
+ Set seenKeys = new HashSet();
+ for (HasContainer has : hasContainers) {
+ QueryBuilder subQuery = null;
+ if (seenKeys.contains(has.key)) {
+ subQuery = QueryBuilder.start(has.key);
+ } else {
+ subQuery = queryBuilder.put(has.key);
+ }
+
+ if (has.predicate instanceof Contains) {
+
+ BasicDBList values = new BasicDBList();
+ values.addAll((Collection