You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gora.apache.org by dr...@apache.org on 2020/03/23 21:01:34 UTC
[gora] 02/07: GORA-649 MongoDBQuery: Use Filters and Projections
helper
This is an automated email from the ASF dual-hosted git repository.
drazzib pushed a commit to branch GORA-649-replace-deprecated-mongo-api
in repository https://gitbox.apache.org/repos/asf/gora.git
commit 4b6f6bc74a15ac3224758fc1388c6ed185ffd7c0
Author: Damien Raude-Morvan <dr...@drazzib.com>
AuthorDate: Mon Mar 23 21:50:45 2020 +0100
GORA-649 MongoDBQuery: Use Filters and Projections helper
---
.../apache/gora/mongodb/query/MongoDBQuery.java | 55 ++++++++++++----------
1 file changed, 31 insertions(+), 24 deletions(-)
diff --git a/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBQuery.java b/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBQuery.java
index 0c2f22f..762d782 100644
--- a/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBQuery.java
+++ b/gora-mongodb/src/main/java/org/apache/gora/mongodb/query/MongoDBQuery.java
@@ -17,14 +17,24 @@
*/
package org.apache.gora.mongodb.query;
+import com.mongodb.client.model.Projections;
import org.apache.gora.mongodb.store.MongoMapping;
import org.apache.gora.persistency.impl.PersistentBase;
import org.apache.gora.query.Query;
import org.apache.gora.query.impl.QueryBase;
import org.apache.gora.store.DataStore;
+import org.bson.Document;
+import org.bson.conversions.Bson;
-import com.mongodb.BasicDBObject;
-import com.mongodb.DBObject;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static com.mongodb.client.model.Filters.and;
+import static com.mongodb.client.model.Filters.eq;
+import static com.mongodb.client.model.Filters.gte;
+import static com.mongodb.client.model.Filters.lte;
/**
* MongoDB specific implementation of the {@link Query} interface.
@@ -44,40 +54,37 @@ public class MongoDBQuery<K, T extends PersistentBase> extends QueryBase<K, T> {
/**
* Compute the query itself. Only make use of the keys for querying.
*
- * @return a {@link DBObject} corresponding to the query
+ * @return a {@link Document} corresponding to the query
*/
- public static DBObject toDBQuery(Query<?, ?> query) {
- BasicDBObject q = new BasicDBObject();
+ public static Bson toDBQuery(Query<?, ?> query) {
+
if ((query.getStartKey() != null) && (query.getEndKey() != null)
&& query.getStartKey().equals(query.getEndKey())) {
- q.put("_id", query.getStartKey());
+ return eq("_id", query.getStartKey());
} else {
- if (query.getStartKey() != null)
- q.put("_id", new BasicDBObject("$gte", query.getStartKey()));
- if (query.getEndKey() != null)
- q.put("_id", new BasicDBObject("$lte", query.getEndKey()));
+ List<Bson> filters = new ArrayList<>();
+ if (query.getStartKey() != null) {
+ filters.add(gte("_id", query.getStartKey()));
+ }
+ if (query.getEndKey() != null) {
+ filters.add(lte("_id", query.getEndKey()));
+ }
+ return filters.isEmpty() ? new Document() : and(filters);
}
-
- return q;
}
/**
* Compute the projection of the query, that is the fields that will be
* retrieved from the database.
*
- * @return a {@link DBObject} corresponding to the list of field to be
+ * @return a {@link Document} corresponding to the list of field to be
* retrieved with the associated boolean
*/
- public static DBObject toProjection(String[] fields, MongoMapping mapping) {
- BasicDBObject proj = new BasicDBObject();
-
- for (String k : fields) {
- String dbFieldName = mapping.getDocumentField(k);
- if (dbFieldName != null && dbFieldName.length() > 0) {
- proj.put(dbFieldName, true);
- }
- }
-
- return proj;
+ public static Bson toProjection(String[] fields, MongoMapping mapping) {
+ List<String> dbFields = Stream.of(fields)
+ .map(mapping::getDocumentField)
+ .filter(dbField -> dbField != null && !dbField.isEmpty())
+ .collect(Collectors.toList());
+ return Projections.include(dbFields);
}
}