You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/06/08 12:33:20 UTC

[1/2] camel git commit: Implement 'Consider SORT_BY... patch (https://github.com/apache/camel/pull/1016 )' from 2.17.x in a manner consistent with the rewritten MongoDBProducer in 2.18.x. Also; enrich documentation.

Repository: camel
Updated Branches:
  refs/heads/camel-2.17.x 3d11e16b4 -> ab7026649
  refs/heads/master b06e9b0c5 -> 8e6091b43


Implement 'Consider SORT_BY... patch
(https://github.com/apache/camel/pull/1016 )' from 2.17.x in a manner
consistent with the rewritten MongoDBProducer in 2.18.x. Also; enrich
documentation.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8e6091b4
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8e6091b4
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8e6091b4

Branch: refs/heads/master
Commit: 8e6091b431975092c790cdeee3fd860501c3a934
Parents: b06e9b0
Author: Kris Boutilier <kr...@gmail.com>
Authored: Mon Jun 6 18:45:56 2016 -0700
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Jun 8 14:30:08 2016 +0200

----------------------------------------------------------------------
 .../camel-mongodb/src/main/docs/mongodb.adoc    | 56 +++++++++++++++-----
 .../component/mongodb/MongoDbProducer.java      |  9 +++-
 2 files changed, 51 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/8e6091b4/components/camel-mongodb/src/main/docs/mongodb.adoc
----------------------------------------------------------------------
diff --git a/components/camel-mongodb/src/main/docs/mongodb.adoc b/components/camel-mongodb/src/main/docs/mongodb.adoc
index c5dcea2..60a35c2 100644
--- a/components/camel-mongodb/src/main/docs/mongodb.adoc
+++ b/components/camel-mongodb/src/main/docs/mongodb.adoc
@@ -169,8 +169,8 @@ from("direct:findById")
 ------------------------------------------------------------------------------
 
 
-TIP: *Supports fields filter*. This operation supports specifying a fields filter. See
-link:mongodb.html[Specifying a fields filter].
+TIP: *Supports optional parameters*. This operation supports specifying a fields filter. See
+link:mongodb.html[Specifying optional parameters].
 
 [[MongoDB-findOneByQuery]]
 findOneByQuery
@@ -201,8 +201,8 @@ from("direct:findOneByQuery")
     .to("mock:resultFindOneByQuery");
 ------------------------------------------------------------------------------------
 
-TIP: *Supports fields filter*. This operation supports specifying a fields filter. See
-link:mongodb.html[Specifying a fields filter].
+TIP: *Supports optional parameters*. This operation supports specifying a fields filter and/or a sort clause. See
+link:mongodb.html[Specifying optional parameters].
 
 [[MongoDB-findAll]]
 findAll
@@ -259,10 +259,6 @@ changed even after a cursor is iterated, in which case the setting will
 apply on the next batch retrieval. |int/Integer
 |=======================================================================
 
-Additionally, you can set a sortBy criteria by putting the relevant
-`DBObject` describing your sorting in the `CamelMongoDbSortBy` header,
-quick constant: `MongoDbConstants.SORT_BY`.
-
 The `findAll` operation will also return the following OUT headers to
 enable you to iterate through result pages if you are using paging:
 
@@ -277,8 +273,8 @@ consideration. |int/Integer
 consideration. |int/Integer
 |=======================================================================
 
-TIP: *Supports fields filter*. This operation supports specifying a fields filter. See
-link:mongodb.html[Specifying a fields filter].
+TIP: *Supports optional parameters*. This operation supports specifying a fields filter and/or a sort clause. See
+link:mongodb.html[Specifying optional parameters].
 
 [[MongoDB-count]]
 count
@@ -311,9 +307,9 @@ DBObject query = ...
 Long count = template.requestBodyAndHeader("direct:count", query, MongoDbConstants.COLLECTION, "dynamicCollectionName");
 ------------------------------------------------------------------------------------------------------------------------
 
-[[MongoDB-Specifyingafieldsfilter]]
-Specifying a fields filter
-++++++++++++++++++++++++++
+[[MongoDB-Specifyingoptionalparameters]]
+Specifying a fields filter (projection)
++++++++++++++++++++++++++++++++++++++++
 
 Query operations will, by default, return the matching objects in their
 entirety (with all their fields). If your documents are large and you
@@ -334,6 +330,40 @@ DBObject fieldFilter = BasicDBObjectBuilder.start().add("_id", 0).add("boringFie
 Object result = template.requestBodyAndHeader("direct:findAll", (Object) null, MongoDbConstants.FIELDS_FILTER, fieldFilter);
 ----------------------------------------------------------------------------------------------------------------------------
 
+Specifying a sort clause
+++++++++++++++++++++++++
+
+There is a often a requirement to fetch the min/max record from a 
+collection based on sorting by a particular field. In Mongo the 
+operation is performed using syntax similar to:
+
+[source]
+----------------------------------------------------------------------------------------------------------------------------
+db.collection.find().sort({_id: -1}).limit(1)
+// or
+db.collection.findOne({$query:{},$orderby:{_id:-1}})
+----------------------------------------------------------------------------------------------------------------------------
+
+In a Camel route the SORT_BY header can be used with the findOneByQuery 
+operation to achieve the same result. If the FIELDS_FILTER header is also
+specified the operation will return a single field/value pair 
+that can be passed directly to another component (for example, a 
+parameterized MyBatis SELECT query). This example demonstrates fetching 
+the temporally newest document from a collection and reducing the result 
+to a single field, based on the `documentTimestamp` field:
+
+[source,java]
+----------------------------------------------------------------------------------------------------------------------------
+.from("direct:someTriggeringEvent")
+.setHeader(MongoDbConstants.SORT_BY).constant("{\"documentTimestamp\": -1}")
+.setHeader(MongoDbConstants.FIELDS_FILTER).constant("{\"documentTimestamp\": 1}")
+.setBody().constant("{}")
+.to("mongodb:myDb?database=local&collection=myDemoCollection&operation=findOneByQuery")
+.to("direct:aMyBatisParameterizedSelect")
+;
+----------------------------------------------------------------------------------------------------------------------------
+
+
 [[MongoDB-Create/updateoperations]]
 Create/update operations
 ^^^^^^^^^^^^^^^^^^^^^^^^

http://git-wip-us.apache.org/repos/asf/camel/blob/8e6091b4/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbProducer.java b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbProducer.java
index 7127b72..f7663b8 100644
--- a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbProducer.java
+++ b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbProducer.java
@@ -263,11 +263,18 @@ public class MongoDbProducer extends DefaultProducer {
                 MongoCollection<BasicDBObject> dbCol = calculateCollection(exch);
                 BasicDBObject o = exch.getIn().getMandatoryBody(BasicDBObject.class);
 
+                BasicDBObject sortBy = exch.getIn().getHeader(MongoDbConstants.SORT_BY, BasicDBObject.class);
                 BasicDBObject fieldFilter = exch.getIn().getHeader(MongoDbConstants.FIELDS_FILTER, BasicDBObject.class);
+
                 if (fieldFilter == null) {
                     fieldFilter = new BasicDBObject();
                 }
-                BasicDBObject ret = dbCol.find(o).projection(fieldFilter).first();
+                
+                if (sortBy == null) {
+                	sortBy = new BasicDBObject();
+                }
+                
+                BasicDBObject ret = dbCol.find(o).projection(fieldFilter).sort(sortBy).first();
                 exch.getOut().setHeader(MongoDbConstants.RESULT_TOTAL_SIZE, ret == null ? 0 : 1);
                 return ret;
             } catch (InvalidPayloadException e) {


[2/2] camel git commit: Consider sortBy header when performing findOneByQuery operation

Posted by da...@apache.org.
Consider sortBy header when performing findOneByQuery operation

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ab702664
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ab702664
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ab702664

Branch: refs/heads/camel-2.17.x
Commit: ab702664950b024ba421a0c7f75f30a302a227fc
Parents: 3d11e16
Author: Kris Boutilier <kr...@gmail.com>
Authored: Mon Jun 6 16:56:42 2016 -0700
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Jun 8 14:31:54 2016 +0200

----------------------------------------------------------------------
 .../apache/camel/component/mongodb/MongoDbProducer.java | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ab702664/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbProducer.java b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbProducer.java
index c9ae6eb..207f564 100644
--- a/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbProducer.java
+++ b/components/camel-mongodb/src/main/java/org/apache/camel/component/mongodb/MongoDbProducer.java
@@ -351,13 +351,17 @@ public class MongoDbProducer extends DefaultProducer {
         DBObject o = exchange.getIn().getMandatoryBody(DBObject.class);
         DBObject ret;
 
+        DBObject sortBy = exchange.getIn().getHeader(MongoDbConstants.SORT_BY, DBObject.class);
         DBObject fieldFilter = exchange.getIn().getHeader(MongoDbConstants.FIELDS_FILTER, DBObject.class);
-        if (fieldFilter == null) {
-            ret = dbCol.findOne(o);
-        } else {
+
+        if (sortBy != null) {
+            ret = dbCol.findOne(o, fieldFilter, sortBy);
+        } else if (fieldFilter != null) {
             ret = dbCol.findOne(o, fieldFilter);
+        } else {
+            ret = dbCol.findOne(o);
         }
-
+        
         Message resultMessage = prepareResponseMessage(exchange, MongoDbOperation.findOneByQuery);
         resultMessage.setBody(ret);
         resultMessage.setHeader(MongoDbConstants.RESULT_TOTAL_SIZE, ret == null ? 0 : 1);