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