Session: Querying: How to query?

Database can be queried using QueryDSL-enabled query method with few custom extension that will be described later.

Syntax

public <T> IRavenQueryable<T> query(Class<T> clazz);  // perform query on a dynamic index

public <T> IRavenQueryable<T> query(Class<T> clazz, String indexName);

public <T> IRavenQueryable<T> query(Class<T> clazz, String indexName, boolean isMapReduce);

public <T> IRavenQueryable<T> query(Class<T> clazz, Class<? extends AbstractIndexCreationTask> indexCreator);
Parameters
indexName String Name of an index to perform query on
isMapReduce boolean Indicates if queried index is a map/reduce index (modifies how we treat identifier properties).
Return Value
IRavenQueryable Instance implementing IRavenQueryable interface containing additional query methods.

Safe By Default

The default value of a page size for a query is 128 results. In order to retrieve a different number of results in a single query use .Take(pageSize) method.

Example I - Basic

// load up to 128 entities from 'Employees' collection
List<Employee> employees = session
  .query(Employee.class)
  .toList();

Notice that by specifying Employee as a class parameter, we are not only defining a result type, but also marking name of collection that will be queried.

Example II - Syntax

Queries can be performed using strongly typed syntax.

// load up to 128 entities from 'Employees' collection
// where FirstName equals 'Robert'
QEmployee e = QEmployee.employee;
List<Employee> employees = session
  .query(Employee.class)
  .where(e.firstName.eq("Robert"))
  .toList();

Example III - Querying specified index

// load up to 128 entities from 'Employees' collection
// where FirstName equals 'Robert'
// using 'My/Custom/Index'
QEmployee e = QEmployee.employee;
List<Employee> employees = session
  .query(Employee.class, "My/Custom/Index")
  .where(e.firstName.eq("Robert"))
  .toList();

or

// load up to 128 entities from 'Employees' collection
// where FirstName equals 'Robert'
// using 'My/Custom/Index'
QEmployee e = QEmployee.employee;
List<Employee> employees = session
  .query(Employee.class, MyCustomIndex.class)
  .where(e.firstName.eq("Robert"))
  .toList();

Custom methods and extensions

Available custom methods and extensions: