This documentation is not maintained. Please refer to doc.castsoftware.com/technologies to find the latest updates.

CAST supports MongoDB via its com.castsoftware.nosqljava extension. Details about how this support is provided for Java with Spring Data source code is discussed below.

Supported Libraries

LibraryVersionSupported
Spring Data MongoDB Up to: 3.2.x(tick)

Supported Operations

OperationScenario

Methods Supported

InsertRepository APIs

org.springframework.data.repository.CrudRepository.save

org.springframework.data.repository.CrudRepository.saveAll

org.springframework.data.repository.ReactiveCrudRepository.save

org.springframework.data.repository.ReactiveCrudRepository.saveAll

org.springframework.data.repository.MongoRepository.insert

org.springframework.data.repository.MongoRepository.save

org.springframework.data.repository.MongoRepository.saveAll

org.springframework.data.repository.ReactiveMongoRepository.saveAll

org.springframework.data.repository.MongoRepository.save

org.springframework.data.repository.ReactiveMongoRepository.insert

InsertTemplate and operation APIs

org.springframework.data.mongodb.core.MongoTemplate.insert

org.springframework.data.mongodb.core.MongoTemplate.insertAll

org.springframework.data.mongodb.core.MongoTemplate.save

org.springframework.data.mongodb.core.MongoTemplate.upsert

org.springframework.data.mongodb.core.BulkOperations.upsert

org.springframework.data.mongodb.core.ReactiveMongoTemplate.insert

org.springframework.data.mongodb.core.ReactiveMongoTemplate.insertAll

org.springframework.data.mongodb.core.ReactiveMongoTemplate.save

org.springframework.data.mongodb.core.ReactiveMongoTemplate.upsert

org.springframework.data.mongodb.core.MongoOperations.insert

org.springframework.data.mongodb.core.MongoOperations.insertAll

org.springframework.data.mongodb.core.MongoOperations.save

org.springframework.data.mongodb.core.ReactiveMongoOperations.insert

org.springframework.data.mongodb.core.ReactiveMongoOperations.insertAll

org.springframework.data.mongodb.core.ReactiveMongoOperations.upsert

SelectRepository APIs

org.springframework.data.repository.CrudRepository.findAll

org.springframework.data.repository.CrudRepository.count

org.springframework.data.repository.CrudRepository.findById

org.springframework.data.repository.CrudRepository.findAllById

org.springframework.data.repository.CrudRepository.existsById

org.springframework.data.repository.PagingAndSortingRepository.findAll

org.springframework.data.repository.QueryByExampleExecutor.count

org.springframework.data.repository.QueryByExampleExecutor.exists

org.springframework.data.repository.QueryByExampleExecutor.findAll

org.springframework.data.repository.QueryByExampleExecutor.findOne

org.springframework.data.repository.ReactiveCrudRepository.findAll

org.springframework.data.repository.ReactiveCrudRepository.count

org.springframework.data.repository.ReactiveCrudRepository.findById

org.springframework.data.repository.ReactiveCrudRepository.findAllById

org.springframework.data.repository.ReactiveCrudRepository.existsById

org.springframework.data.repository.ReactiveQueryByExampleExecutor.count

org.springframework.data.repository.ReactiveQueryByExampleExecutor.exists

org.springframework.data.repository.ReactiveQueryByExampleExecutor.findAll

org.springframework.data.repository.ReactiveQueryByExampleExecutor.findOne

org.springframework.data.repository.ReactiveMongoRepository.findAll

org.springframework.data.repository.MongoRepository.findAll

org.springframework.data.repository.MongoRepository.count

org.springframework.data.repository.MongoRepository.findById

org.springframework.data.repository.MongoRepository.findAllById

org.springframework.data.repository.MongoRepository.existsById

org.springframework.data.repository.MongoRepository.findOne

org.springframework.data.repository.ReactiveMongoRepository.count

org.springframework.data.repository.ReactiveMongoRepository.findById

org.springframework.data.repository.ReactiveMongoRepository.findAllById

org.springframework.data.repository.ReactiveMongoRepository.existsById

org.springframework.data.repository.ReactiveMongoRepository.findOne

SelectTemplate and operation APIs

org.springframework.data.mongodb.core.MongoTemplate.getCollection

org.springframework.data.mongodb.core.MongoTemplate.find

org.springframework.data.mongodb.core.MongoTemplate.findAll

org.springframework.data.mongodb.core.MongoTemplate.findAllAndRemove

org.springframework.data.mongodb.core.MongoTemplate.findAndModify

org.springframework.data.mongodb.core.MongoTemplate.findAndRemove

org.springframework.data.mongodb.core.MongoTemplate.findAndReplace

org.springframework.data.mongodb.core.MongoTemplate.findById

org.springframework.data.mongodb.core.MongoTemplate.findDistinct

org.springframework.data.mongodb.core.MongoTemplate.findOne

org.springframework.data.mongodb.core.MongoTemplate.exists

org.springframework.data.mongodb.core.MongoTemplate.count

org.springframework.data.mongodb.core.MongoTemplate.collectionExists

org.springframework.data.mongodb.core.MongoTemplate.stream

org.springframework.data.mongodb.core.MongoTemplate.group

org.springframework.data.mongodb.core.MongoTemplate.geoNear

org.springframework.data.mongodb.core.MongoTemplate.aggregate

org.springframework.data.mongodb.core.MongoTemplate.aggregateStream

org.springframework.data.mongodb.core.MongoTemplate.aggregateAndReturn

org.springframework.data.mongodb.core.MongoTemplate.executeQuery

org.springframework.data.mongodb.core.ReactiveMongoTemplate.getCollection

org.springframework.data.mongodb.core.ReactiveMongoTemplate.find

org.springframework.data.mongodb.core.ReactiveMongoTemplate.findAll

org.springframework.data.mongodb.core.ReactiveMongoTemplate.findAllAndRemove

org.springframework.data.mongodb.core.ReactiveMongoTemplate.findAndModify

org.springframework.data.mongodb.core.ReactiveMongoTemplate.findAndRemove

org.springframework.data.mongodb.core.ReactiveMongoTemplate.findAndReplace

org.springframework.data.mongodb.core.ReactiveMongoTemplate.findById

org.springframework.data.mongodb.core.ReactiveMongoTemplate.findDistinct

org.springframework.data.mongodb.core.ReactiveMongoTemplate.findOne

org.springframework.data.mongodb.core.ReactiveMongoTemplate.exists

org.springframework.data.mongodb.core.ReactiveMongoTemplate.count

org.springframework.data.mongodb.core.ReactiveMongoTemplate.collectionExists

org.springframework.data.mongodb.core.ReactiveMongoTemplate.stream

org.springframework.data.mongodb.core.ReactiveMongoTemplate.group

org.springframework.data.mongodb.core.ReactiveMongoTemplate.geoNear

org.springframework.data.mongodb.core.ReactiveMongoTemplate.aggregate

org.springframework.data.mongodb.core.ReactiveMongoTemplate.aggregateStream

org.springframework.data.mongodb.core.ReactiveMongoTemplate.aggregateAndReturn

org.springframework.data.mongodb.core.ReactiveMongoTemplate.executeQuery

org.springframework.data.mongodb.core.MongoOperations.aggregate

org.springframework.data.mongodb.core.MongoOperations.aggregateStream

org.springframework.data.mongodb.core.MongoOperations.aggregateAndReturn

org.springframework.data.mongodb.core.MongoOperations.collectionExists

org.springframework.data.mongodb.core.MongoOperations.count

org.springframework.data.mongodb.core.MongoOperations.exists

org.springframework.data.mongodb.core.MongoOperations.find

org.springframework.data.mongodb.core.MongoOperations.findAll

org.springframework.data.mongodb.core.MongoOperations.findAllAndRemove

org.springframework.data.mongodb.core.MongoOperations.findAndModify

org.springframework.data.mongodb.core.MongoOperations.findAndRemove

org.springframework.data.mongodb.core.MongoOperations.findAndReplace

org.springframework.data.mongodb.core.MongoOperations.findById

org.springframework.data.mongodb.core.MongoOperations.findOne

org.springframework.data.mongodb.core.MongoOperations.geoNear

org.springframework.data.mongodb.core.MongoOperations.getCollection

org.springframework.data.mongodb.core.MongoOperations.group

org.springframework.data.mongodb.core.ReactiveMongoOperations.aggregate

org.springframework.data.mongodb.core.ReactiveMongoOperations.aggregateStream

org.springframework.data.mongodb.core.ReactiveMongoOperations.aggregateAndReturn

org.springframework.data.mongodb.core.ReactiveMongoOperations.collectionExists

org.springframework.data.mongodb.core.ReactiveMongoOperations.count

org.springframework.data.mongodb.core.ReactiveMongoOperations.exists

org.springframework.data.mongodb.core.ReactiveMongoOperations.find

org.springframework.data.mongodb.core.ReactiveMongoOperations.findAll

org.springframework.data.mongodb.core.ReactiveMongoOperations.findAllAndRemove

org.springframework.data.mongodb.core.ReactiveMongoOperations.findAndModify

org.springframework.data.mongodb.core.ReactiveMongoOperations.findAndRemove

org.springframework.data.mongodb.core.ReactiveMongoOperations.findAndReplace

org.springframework.data.mongodb.core.ReactiveMongoOperations.findById

org.springframework.data.mongodb.core.ReactiveMongoOperations.findOne

org.springframework.data.mongodb.core.ReactiveMongoOperations.geoNear

org.springframework.data.mongodb.core.ReactiveMongoOperations.getCollection

org.springframework.data.mongodb.core.ReactiveMongoOperations.group

DeleteRepository APIs

org.springframework.data.repository.CrudRepository.deleteAll

org.springframework.data.repository.CrudRepository.deleteById

org.springframework.data.repository.CrudRepository.delete

org.springframework.data.repository.ReactiveCrudRepository.deleteAll

org.springframework.data.repository.ReactiveCrudRepository.deleteById

org.springframework.data.repository.ReactiveCrudRepository.delete

org.springframework.data.repository.ReactiveMongoRepository.deleteAll

org.springframework.data.repository.ReactiveMongoRepository.deleteById

org.springframework.data.repository.ReactiveMongoRepository.delete

org.springframework.data.repository.MongoRepository.delete

org.springframework.data.repository.MongoRepository.deleteAll

org.springframework.data.repository.MongoRepository.deleteById

DeleteTemplate and operation APIs

org.springframework.data.mongodb.core.MongoTemplate.findAndRemove

org.springframework.data.mongodb.core.MongoTemplate.findAllAndRemove

org.springframework.data.mongodb.core.MongoTemplate.dropCollection

org.springframework.data.mongodb.core.BulkOperations.remove

org.springframework.data.mongodb.core.MongoTemplate.remove

org.springframework.data.mongodb.core.ReactiveMongoTemplate.remove

org.springframework.data.mongodb.core.ReactiveMongoTemplate.findAndRemove

org.springframework.data.mongodb.core.ReactiveMongoTemplate.findAllAndRemove

org.springframework.data.mongodb.core.ReactiveMongoTemplate.dropCollection

org.springframework.data.mongodb.core.ReactiveBulkOperations.remove

org.springframework.data.mongodb.core.MongoOperations.dropCollection

org.springframework.data.mongodb.core.MongoOperations.findAndRemove

org.springframework.data.mongodb.core.MongoOperations.findAllAndRemove

org.springframework.data.mongodb.core.MongoOperations.remove

org.springframework.data.mongodb.core.ReactiveMongoOperations.dropCollection

org.springframework.data.mongodb.core.ReactiveMongoOperations.findAndRemove

org.springframework.data.mongodb.core.ReactiveMongoOperations.findAllAndRemove

org.springframework.data.mongodb.core.ReactiveMongoOperations.remove

UpdateTemplate and operation APIs

org.springframework.data.mongodb.core.MongoTemplate.upsert

org.springframework.data.mongodb.core.MongoTemplate.update

org.springframework.data.mongodb.core.MongoTemplate.updateFirst

org.springframework.data.mongodb.core.MongoTemplate.updateMulti

org.springframework.data.mongodb.core.MongoTemplate.findAndModify

org.springframework.data.mongodb.core.MongoTemplate.findAndReplace

org.springframework.data.mongodb.core.BulkOperations.updateOne

org.springframework.data.mongodb.core.BulkOperations.updateMulti

org.springframework.data.mongodb.core.BulkOperations.upsert

org.springframework.data.mongodb.core.ReactiveMongoTemplate.upsert

org.springframework.data.mongodb.core.ReactiveMongoTemplate.update

org.springframework.data.mongodb.core.ReactiveMongoTemplate.updateFirst

org.springframework.data.mongodb.core.ReactiveMongoTemplate.updateMulti

org.springframework.data.mongodb.core.ReactiveMongoTemplate.findAndModify

org.springframework.data.mongodb.core.ReactiveMongoTemplate.findAndReplace

org.springframework.data.mongodb.core.ReactiveBulkOperations.updateOne

org.springframework.data.mongodb.core.ReactiveBulkOperations.updateMulti

org.springframework.data.mongodb.core.ReactiveBulkOperations.upsert

org.springframework.data.mongodb.core.MongoOperations.findAndModify

org.springframework.data.mongodb.core.MongoOperations.findAndReplace

org.springframework.data.mongodb.core.MongoOperations.upsert

org.springframework.data.mongodb.core.MongoOperations.updateFirst

org.springframework.data.mongodb.core.MongoOperations.updateMulti

org.springframework.data.mongodb.core.ReactiveMongoOperations.findAndModify

org.springframework.data.mongodb.core.ReactiveMongoOperations.findAndReplace

org.springframework.data.mongodb.core.ReactiveMongoOperations.upsert

org.springframework.data.mongodb.core.ReactiveMongoOperations.updateFirst

org.springframework.data.mongodb.core.ReactiveMongoOperations.updateMulti

Objects

IconDescription

Java MongoDB database

Java MongoDB collection

Java unknown MongoDB database

Java unknown MongoDB collection
Link typeSource and destination of linkMethods supported
parentLink

Between Mongo Objects (Collection → Database → Project)

-
useLinkBetween the caller Spring Data Java Method objects and Mongo Collection Object

mapReduce

useSelectLink

Between the caller Spring Data Java Method objects and Mongo Collection Object

find

findAll

findById

findAllById

findAll

count

existsById

exists

findAndRemove

findAllAndRemove

findAndReplace

findAndModify

findOne

stream

group

geoNear

aggregate

aggregateStream

aggregateAndReturn

executeQuery

getCollection

findDistinct

useUpdateLinkBetween the caller Spring Data Java Method objects and Mongo Collection Object

upsert

update

updateFirst

updateOne

updateMulti

findAndModify

findAndReplace

useDeleteLinkBetween the caller Spring Data Java Method objects and Mongo Collection Object

deleteAll

deleteById

delete

findAndRemove

dropCollection

remove

findAllAndRemove

useInsertLinkBetween the caller Spring Data Java Method objects and Mongo Collection Object

save

saveAll

insert

insertAll

upsert

What results can you expect

Some example scenarios are shown below:

Creation of database objects

With application.properties

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=hc4

logging.level.org.springframework.data=debug
logging.level.=error

With Java configuration file

package com.mkyong;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;

import com.mongodb.Mongo;
import com.mongodb.MongoClient;

@Configuration
@EnableMongoRepositories
public class ApplicationConfig extends AbstractMongoConfiguration{
	 @Override
	 @Bean
	  protected String getDatabaseName() {
	    return "e-store";
	  }

	  @Override
	  protected String getMappingBasePackage() {
	    return "com.oreilly.springdata.mongodb";
	  }
	@Override
	@Bean
	public Mongo mongo() throws Exception {
		// TODO Auto-generated method stub
		return new Mongo("localhost");
	}
}

Insert Operation

public Product getMrepefOne () {
	Product product = new Product("LN1", "London", 5.0f);
	productRepository.save(product);

	return productRepository.findOne("LN1");
}

@Override
    public BulkWriteResult bulk(Collection<? extends T> objects) {
      Assert.notNull(objects, "Objects must not be null!");
      return mongoTemplate.bulkOps(bulkMode != null ? bulkMode : BulkMode.ORDERED, Product.class)
          .insert(new ArrayList<>(objects)).execute();
    }

Update Operation

public String updateAlertStatus(String alertId) {

		LOGGER.debug("FanAlertsRepository.deleteAlert() with param{0}" + alertId);
		Query query = new Query();

		query.addCriteria(Criteria.where(AlertServiceConstants._ID_FILED).is(new ObjectId(alertId)));

		FanAlerts fanAlert = mongoOperation.findOne(query, FanAlerts.class,
				AlertServiceConstants.FAN_ALERTS_COLLECTION);
		if (fanAlert == null) {
			return AlertServiceConstants.failure;
	

Delete Operation

public Response deleteTn(String siteId, String tn) {
		DeleteResult deleteres = mongoCon.getCollection()
					.deleteOne(new Document().append(DETAILSSITE_IDEN, siteId).append(DETAILS_TN, tn));
}

Select Operation

public GeoResults getProductByLocation (double longitude,double latitude,double distance){
	Point p = new Point(longitude, latitude);
    NearQuery nearQuery  = NearQuery.near(p, Metrics.KILOMETERS).maxDistance(distance);
    return mongoTemplate.geoNear(nearQuery, Product.class);
    
}

Query Methods 

@Query("{ 'age' : { $gt: ?0, $lt: ?1 } }")
    List<User> findUsersByAgeBetween(int ageGT, int ageLT);

Known Limitations

  • Resolution of Database and Collection is limited, "Unknown" is used when not resolved.
  • Query method results in link between query method and repository collection (domain entity) and not between the actual caller method and repository collection