|
|
|
|
@@ -268,6 +268,27 @@ public class AppConfig {
|
|
|
|
|
own converter. Please refer to the section on MongoCoverters for more
|
|
|
|
|
detailed information.</para>
|
|
|
|
|
|
|
|
|
|
<para>The <classname>MongoTemplate</classname> class implements the
|
|
|
|
|
interface <interfacename>MongoOperations</interfacename>. In as much as
|
|
|
|
|
possible, the methods on <interfacename>MongoOperations</interfacename>
|
|
|
|
|
are named after methods available on the MongoDB driver
|
|
|
|
|
<classname>Collection</classname> object. For example, you will find
|
|
|
|
|
methods such as "find", "findAndModify", "findOne", "insert", "remove",
|
|
|
|
|
"save", "update" and "updateMulti". The design goal was to make it as easy
|
|
|
|
|
as possible to transition between the use of the base MongoDB driver and
|
|
|
|
|
<interfacename>MongoOperations</interfacename>. The difference in betwee
|
|
|
|
|
the two is that MongOperations can be passed domain objects instead of
|
|
|
|
|
<classname>DBObject</classname> and there are fluent APIs for
|
|
|
|
|
<classname>Query</classname>, <classname>Criteria</classname>, and
|
|
|
|
|
<classname>Update</classname> operations instead of
|
|
|
|
|
<classname>DBObject</classname>..</para>
|
|
|
|
|
|
|
|
|
|
<note>
|
|
|
|
|
<para>The preferred way to reference the operations on
|
|
|
|
|
<classname>MongoTemplate</classname> instance is via its interface
|
|
|
|
|
<interfacename>MongoOperations</interfacename>.</para>
|
|
|
|
|
</note>
|
|
|
|
|
|
|
|
|
|
<para>The default converter implementation used by
|
|
|
|
|
<classname>MongoTemplate</classname> is
|
|
|
|
|
<classname>SimpleMappingConverter</classname>, which as the name implies,
|
|
|
|
|
@@ -401,11 +422,13 @@ public class AppConfig {
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section>
|
|
|
|
|
<title>Saving, Updating, and Deleting Documents</title>
|
|
|
|
|
<title>Saving, Updating, and Removing Documents</title>
|
|
|
|
|
|
|
|
|
|
<para>MongoTemplate provides a simple way for you to save, update, and
|
|
|
|
|
delete your domain objects and map those objects to documents stored in
|
|
|
|
|
MongoDB. Given a simple class such as Person</para>
|
|
|
|
|
MongoDB. </para>
|
|
|
|
|
|
|
|
|
|
<para>Given a simple class such as Person</para>
|
|
|
|
|
|
|
|
|
|
<programlisting>public class Person {
|
|
|
|
|
|
|
|
|
|
@@ -466,16 +489,49 @@ remove using query: { "_id" : { "$oid" : "4d9e82ac94fa72c65a9e7d5f"}}
|
|
|
|
|
Number of people = : 0</programlisting>
|
|
|
|
|
|
|
|
|
|
<para>There was implicit conversion using SimpleMongoConverter between a
|
|
|
|
|
String and ObjectId as stored in the database.</para>
|
|
|
|
|
String and ObjectId as stored in the database and recognizing a convention
|
|
|
|
|
of the property "Id" name. </para>
|
|
|
|
|
|
|
|
|
|
<note>
|
|
|
|
|
<para>This example is meant to show the use of save, update and remove
|
|
|
|
|
operations on MongoTemplate and not to show complex mapping
|
|
|
|
|
functionality</para>
|
|
|
|
|
</note>
|
|
|
|
|
|
|
|
|
|
<para>The query stynax used in the example is explained in more detail in
|
|
|
|
|
the section <link linkend="mongo.query">Querying Documents</link>.</para>
|
|
|
|
|
|
|
|
|
|
<section>
|
|
|
|
|
<title>Methods for saving documents</title>
|
|
|
|
|
<title>Methods for saving and inserting documents</title>
|
|
|
|
|
|
|
|
|
|
<para>Once we have created the collection and maybe an index we can
|
|
|
|
|
start using the collection to store our domain objects as documents.
|
|
|
|
|
Note that we are using a static import for
|
|
|
|
|
<classname>org.springframework.data.document.mongodb.query.Criteria.where</classname>
|
|
|
|
|
to make the query more readable.</para>
|
|
|
|
|
<para>There are several convenient methods on MongoTemplate for saving
|
|
|
|
|
and inserting your objects. In addition to using a
|
|
|
|
|
<interfacename>MongoCoverter</interfacename> to converter your domain
|
|
|
|
|
object to the database, you can also use an implementation of the
|
|
|
|
|
<interfacename>MongoWriter</interfacename> interface to have very fine
|
|
|
|
|
grained control over the conversion process.</para>
|
|
|
|
|
|
|
|
|
|
<note>
|
|
|
|
|
<para>The difference between insert and save operations is that a save
|
|
|
|
|
operation will perform an insert if the object is not already
|
|
|
|
|
present.</para>
|
|
|
|
|
</note>
|
|
|
|
|
|
|
|
|
|
<para>The simple case of using the save operation is to pass in as an
|
|
|
|
|
argument only the object to save. In this case the default collection
|
|
|
|
|
assigned to the template will be used unless the converter overrides
|
|
|
|
|
this default through the use of more specific mapping metadata. You may
|
|
|
|
|
also call the save operation with a specific collection name. </para>
|
|
|
|
|
|
|
|
|
|
<para>When inserting or saving, if the Id property is not set, the
|
|
|
|
|
assumption is that its value will be autogenerated by the database. As
|
|
|
|
|
such, for autogeneration of an ObjectId to succeed the type of the Id
|
|
|
|
|
property/field in your class must be either a
|
|
|
|
|
<classname>String</classname>, <classname>ObjectId</classname>, or
|
|
|
|
|
<classname>BigInteger</classname>.</para>
|
|
|
|
|
|
|
|
|
|
<para>Here is a basic example of using the save operation and retrieving
|
|
|
|
|
its contents.</para>
|
|
|
|
|
|
|
|
|
|
<example>
|
|
|
|
|
<title>Inserting and retrieving documents using the
|
|
|
|
|
@@ -489,10 +545,13 @@ import static org.springframework.data.document.mongodb.query.Criteria.query;
|
|
|
|
|
Person p = new Person("Bob", 33);
|
|
|
|
|
mongoTemplate.insert("MyCollection", p);
|
|
|
|
|
|
|
|
|
|
Person qp = mongoTemplate.findOne("MyCollection", query(where("id").is(p.getId())), Person.class);
|
|
|
|
|
Person qp = mongoTemplate.findOne("MyCollection", query(where("age").is(33)), Person.class);
|
|
|
|
|
</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
|
|
|
|
|
<para>The four save operations available to you are listed below.
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para><itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal>void</literal> <emphasis role="bold">save
|
|
|
|
|
@@ -521,29 +580,104 @@ import static org.springframework.data.document.mongodb.query.Criteria.query;
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist></para>
|
|
|
|
|
|
|
|
|
|
<para></para>
|
|
|
|
|
<para>A similar set of insert operations is listed below </para>
|
|
|
|
|
|
|
|
|
|
<para><itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal>void</literal> <emphasis
|
|
|
|
|
role="bold">insert</emphasis> <literal>(Object objectToSave)
|
|
|
|
|
</literal> Insert the object to the default collection.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal>void</literal> <emphasis role="bold">insert
|
|
|
|
|
</emphasis> <literal>(String collectionName, Object objectToSave)
|
|
|
|
|
</literal> Insert the object to the specified collection.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal><T> void</literal> <emphasis
|
|
|
|
|
role="bold">insert </emphasis> <literal>(T objectToSave,
|
|
|
|
|
MongoWriter<T> writer) </literal> Insert the object into the
|
|
|
|
|
default collection using the provided writer.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal><T> void</literal> <emphasis
|
|
|
|
|
role="bold">insert </emphasis> <literal>(String collectionName, T
|
|
|
|
|
objectToSave, MongoWriter<T> writer) </literal> Insert the
|
|
|
|
|
object into the specified collection using the provided
|
|
|
|
|
writer.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist></para>
|
|
|
|
|
|
|
|
|
|
<section>
|
|
|
|
|
<title>Inserting Lists of objects in batch</title>
|
|
|
|
|
|
|
|
|
|
<para>The MongoDB driver supports inserting a collection of documents
|
|
|
|
|
in one operation. The methods in the MongoOperations interface that
|
|
|
|
|
support this functionality are listed below</para>
|
|
|
|
|
|
|
|
|
|
<para><itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal>void</literal> <emphasis
|
|
|
|
|
role="bold">insertList</emphasis><literal> (List<? extends
|
|
|
|
|
Object> listToSave)</literal><literal> </literal> Insert a
|
|
|
|
|
list of objects into the default collection in a single batch
|
|
|
|
|
write to the database.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal>void</literal> <emphasis
|
|
|
|
|
role="bold">insertList</emphasis> <literal>(String
|
|
|
|
|
collectionName, List<? extends Object>
|
|
|
|
|
listToSave)</literal><literal> </literal>Insert a list of
|
|
|
|
|
objects into the specified collection in a single batch write to
|
|
|
|
|
the database.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal><T> void</literal> <emphasis
|
|
|
|
|
role="bold">insertList</emphasis><literal> (List<? extends
|
|
|
|
|
T> listToSave, MongoWriter<T> writer)</literal>
|
|
|
|
|
<literal></literal> Insert the object into the default
|
|
|
|
|
collection using the provided writer.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal><T> void</literal> <emphasis
|
|
|
|
|
role="bold">insertList</emphasis><literal>(String
|
|
|
|
|
collectionName, List<? extends T> listToSave,
|
|
|
|
|
MongoWriter<T> writer)</literal> Insert a list of objects
|
|
|
|
|
into the specified collection using the provided MongoWriter
|
|
|
|
|
instance</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist></para>
|
|
|
|
|
</section>
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section id="mongodb-template-update">
|
|
|
|
|
<title>Updating documents in a collection</title>
|
|
|
|
|
|
|
|
|
|
<para>For updates we can elect to update the first document found using
|
|
|
|
|
<interfacename>MongoOperation</interfacename>'s method
|
|
|
|
|
<literal>updateFirst</literal> or we can update all documents that were
|
|
|
|
|
found to match the query using<literal>updateMulti</literal>. Here is an
|
|
|
|
|
example of an update of all SAVINGS accounts where we are adding a one
|
|
|
|
|
time $50.00 bonus to the balance using the <literal>$inc</literal>
|
|
|
|
|
operator.</para>
|
|
|
|
|
found to match the query using the method
|
|
|
|
|
<literal>updateMulti</literal>. Here is an example of an update of all
|
|
|
|
|
SAVINGS accounts where we are adding a one time $50.00 bonus to the
|
|
|
|
|
balance using the <literal>$inc</literal> operator.</para>
|
|
|
|
|
|
|
|
|
|
<example>
|
|
|
|
|
<title>Updating documents using the MongoTemplate</title>
|
|
|
|
|
|
|
|
|
|
<programlisting language="java">import static org.springframework.data.document.mongodb.query.Criteria.where;
|
|
|
|
|
import static org.springframework.data.document.mongodb.query.Query.query;
|
|
|
|
|
import static org.springframework.data.document.mongodb.query.Update
|
|
|
|
|
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
WriteResult wr = mongoTemplate.updateMulti(
|
|
|
|
|
new Query(where("accounts.accountType").is(Account.Type.SAVINGS)),
|
|
|
|
|
new Update().inc("accounts.$.balance", 50.00));
|
|
|
|
|
WriteResult wr = mongoTemplate.updateMulti(query(where("accounts.accountType").is(Account.Type.SAVINGS)),
|
|
|
|
|
update.inc("accounts.$.balance", 50.00));
|
|
|
|
|
</programlisting>
|
|
|
|
|
</example>
|
|
|
|
|
|
|
|
|
|
@@ -672,81 +806,24 @@ import static org.springframework.data.document.mongodb.query.Criteria.query;
|
|
|
|
|
</section>
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section>
|
|
|
|
|
<title>Methods for inserting documents</title>
|
|
|
|
|
|
|
|
|
|
<para><itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal>void</literal> <emphasis role="bold">insert
|
|
|
|
|
</emphasis> <literal>(Object objectToSave) </literal> Insert the
|
|
|
|
|
object into the default collection.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal>void</literal> <emphasis role="bold">insert
|
|
|
|
|
</emphasis> <literal>(String collectionName, Object objectToSave)
|
|
|
|
|
</literal> Insert the object into the specified collection.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal>void</literal> <emphasis role="bold">insertList
|
|
|
|
|
</emphasis> <literal>(List<? extends Object> listToSave)
|
|
|
|
|
</literal> Insert a list of objects into the default collection in
|
|
|
|
|
a single batch write to the database.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal>void</literal> <emphasis role="bold">insertList
|
|
|
|
|
</emphasis> <literal>(String collectionName, List<? extends
|
|
|
|
|
Object> listToSave) </literal> Insert a list of objects into
|
|
|
|
|
the specified collection in a single batch write to the
|
|
|
|
|
database.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal><T> void</literal> <emphasis
|
|
|
|
|
role="bold">insert </emphasis> <literal>(T objectToSave,
|
|
|
|
|
MongoWriter<T> writer) </literal> Insert the object into the
|
|
|
|
|
default collection.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal><T> void</literal> <emphasis
|
|
|
|
|
role="bold">insert </emphasis> <literal>(String collectionName, T
|
|
|
|
|
objectToSave, MongoWriter<T> writer) </literal> Insert the
|
|
|
|
|
object into the specified collection.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal><T> void</literal> <emphasis
|
|
|
|
|
role="bold">insertList </emphasis> <literal>(List<? extends
|
|
|
|
|
T> listToSave, MongoWriter<T> writer) </literal> Insert a
|
|
|
|
|
list of objects into the default collection using the provided
|
|
|
|
|
MongoWriter instance</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal><T> void</literal> <emphasis
|
|
|
|
|
role="bold">insertList </emphasis> <literal>(String
|
|
|
|
|
collectionName, List<? extends T> listToSave,
|
|
|
|
|
MongoWriter<T> writer) </literal> Insert a list of objects
|
|
|
|
|
into the specified collection using the provided MongoWriter
|
|
|
|
|
instance</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist></para>
|
|
|
|
|
|
|
|
|
|
<para></para>
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section>
|
|
|
|
|
<title>Methods for removing documents</title>
|
|
|
|
|
|
|
|
|
|
<para>You can use several overloaded methods to remove an object from
|
|
|
|
|
the database. </para>
|
|
|
|
|
|
|
|
|
|
<para><itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal>void</literal> <emphasis role="bold">remove
|
|
|
|
|
</emphasis> <literal>(Query query)</literal> Remove all documents
|
|
|
|
|
from the default collection that match the provided query document
|
|
|
|
|
criteria.</para>
|
|
|
|
|
<para><literal>void</literal> <emphasis
|
|
|
|
|
role="bold">remove</emphasis> <literal>(Object object)</literal>
|
|
|
|
|
Remove the given object from the collection by Id</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal>void</literal> <emphasis
|
|
|
|
|
role="bold">remove</emphasis> <literal>(Query query)</literal>
|
|
|
|
|
Remove all documents from the default collection that match the
|
|
|
|
|
provided query document criteria.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
@@ -755,16 +832,41 @@ import static org.springframework.data.document.mongodb.query.Criteria.query;
|
|
|
|
|
</literal> Remove all documents from the specified collection that
|
|
|
|
|
match the provided query document criteria.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal><T> void </literal><emphasis
|
|
|
|
|
role="bold">remove</emphasis> <literal>(Query query,
|
|
|
|
|
Class<T> targetClass)</literal> Same behavior as the
|
|
|
|
|
remove(Query) method but the Class parameter is used to help
|
|
|
|
|
convert the Id of the object if it is present in the query.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
<para><literal><T> void </literal><emphasis
|
|
|
|
|
role="bold">remove</emphasis> <literal>(String collectionName,
|
|
|
|
|
Query query, Class<T> targetClass)</literal>Same behavior as
|
|
|
|
|
remove(Query, Class) but the Class parameter is used to help
|
|
|
|
|
convert the Id of the object if it is present in the uqery</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist></para>
|
|
|
|
|
|
|
|
|
|
<para></para>
|
|
|
|
|
</section>
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section>
|
|
|
|
|
<section id="mongo.query">
|
|
|
|
|
<title>Querying Documents</title>
|
|
|
|
|
|
|
|
|
|
<para>Query, Criteria</para>
|
|
|
|
|
<para>You can express you queries using the Query and Criteria classes
|
|
|
|
|
which have method names that mirror the native MongoDB operator names such
|
|
|
|
|
as lt, lte, is, and others. The Query and Criteria classes follow a fluent
|
|
|
|
|
API style so that you can easily chain together multiple method criteria
|
|
|
|
|
and queries while having easy to understand code. Static imports in Java
|
|
|
|
|
are used to help remove the need to see the 'new' keyword for creating
|
|
|
|
|
Query and Criteria instances so as to improve readability. </para>
|
|
|
|
|
|
|
|
|
|
<para>GeoSpatial queries are also supported and are described more in the
|
|
|
|
|
section <link linkend="mongo.geospatial">GeoSpatial Queries</link>.</para>
|
|
|
|
|
|
|
|
|
|
<para></para>
|
|
|
|
|
|
|
|
|
|
@@ -1115,10 +1217,91 @@ import static org.springframework.data.document.mongodb.query.Criteria.query;
|
|
|
|
|
<para></para>
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section>
|
|
|
|
|
<section id="mongo.geospatial" lang="">
|
|
|
|
|
<title>GeoSpatial Queries</title>
|
|
|
|
|
|
|
|
|
|
<para></para>
|
|
|
|
|
<para>MongoDB supports GeoSpatial queries through the use of operators
|
|
|
|
|
such as <literal>$near</literal>, <literal>$within</literal>, and
|
|
|
|
|
<literal>$nearSphere</literal>. Methods specific to geospatial queries
|
|
|
|
|
are available on the <classname>Criteria</classname> class. There are
|
|
|
|
|
also a few shape classes, <classname>Box</classname>,
|
|
|
|
|
<classname>Circle</classname>, and <classname>Point</classname> that are
|
|
|
|
|
used in conjunction with geospatial related Criteria methods. </para>
|
|
|
|
|
|
|
|
|
|
<para>To understand how to perform GeoSpatial queries we will use the
|
|
|
|
|
following Venue class taken from the integration tests.which relies on
|
|
|
|
|
using the rich <classname>MappingMongoConverter</classname>.</para>
|
|
|
|
|
|
|
|
|
|
<programlisting language="java">@Document(collection="newyork")
|
|
|
|
|
public class Venue {
|
|
|
|
|
|
|
|
|
|
@Id
|
|
|
|
|
private String id;
|
|
|
|
|
private String name;
|
|
|
|
|
private double[] location;
|
|
|
|
|
|
|
|
|
|
@PersistenceConstructor
|
|
|
|
|
Venue(String name, double[] location) {
|
|
|
|
|
super();
|
|
|
|
|
this.name = name;
|
|
|
|
|
this.location = location;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Venue(String name, double x, double y) {
|
|
|
|
|
super();
|
|
|
|
|
this.name = name;
|
|
|
|
|
this.location = new double[] { x, y };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public String getName() {
|
|
|
|
|
return name;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public double[] getLocation() {
|
|
|
|
|
return location;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String toString() {
|
|
|
|
|
return "Venue [id=" + id + ", name=" + name + ", location="
|
|
|
|
|
+ Arrays.toString(location) + "]";
|
|
|
|
|
}
|
|
|
|
|
}</programlisting>
|
|
|
|
|
|
|
|
|
|
<para>To find locations within a circle, the following query can be
|
|
|
|
|
used.</para>
|
|
|
|
|
|
|
|
|
|
<programlisting lang="java">Circle circle = new Circle(-73.99171, 40.738868, 0.01);
|
|
|
|
|
List<Venue> venues = template.find(new Query(Criteria.where("location").withinCenter(circle)), Venue.class);</programlisting>
|
|
|
|
|
|
|
|
|
|
<para>To find venues within a circle using Spherical coordinates the
|
|
|
|
|
following query can be used</para>
|
|
|
|
|
|
|
|
|
|
<programlisting lang="java">Circle circle = new Circle(-73.99171, 40.738868, 0.003712240453784);
|
|
|
|
|
List<Venue> venues = template.find(new Query(Criteria.where("location").withinCenterSphere(circle)), Venue.class);</programlisting>
|
|
|
|
|
|
|
|
|
|
<para>To find venues within a Box the following query can be used</para>
|
|
|
|
|
|
|
|
|
|
<programlisting>Box box = new Box(new Point(-73.99756, 40.73083), new Point(-73.988135, 40.741404)); //lower-left then upper-right
|
|
|
|
|
List<Venue> venues = template.find(new Query(Criteria.where("location").withinBox(box)), Venue.class);</programlisting>
|
|
|
|
|
|
|
|
|
|
<para>To find venues near a Point, the following query can be
|
|
|
|
|
used</para>
|
|
|
|
|
|
|
|
|
|
<programlisting>Point point = new Point(-73.99171, 40.738868);
|
|
|
|
|
List<Venue> venues = template.find(new Query(Criteria.where("location").near(point).maxDistance(0.01)), Venue.class);</programlisting>
|
|
|
|
|
|
|
|
|
|
<para>To find venues near a Point using Spherical coordines the
|
|
|
|
|
following query can be used</para>
|
|
|
|
|
|
|
|
|
|
<programlisting>Point point = new Point(-73.99171, 40.738868);
|
|
|
|
|
List<Venue> venues = template.find(new Query(Criteria.where("location").nearSphere(point).maxDistance(0.003712240453784)), Venue.class);
|
|
|
|
|
</programlisting>
|
|
|
|
|
|
|
|
|
|
<note>
|
|
|
|
|
<para>Support for the GeoNear command will be provided in the RC
|
|
|
|
|
release.</para>
|
|
|
|
|
</note>
|
|
|
|
|
</section>
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|