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
Library | Version | Supported |
---|---|---|
Spring Data MongoDB | Up to: 3.2.x |
Supported Operations
Operation | Scenario | Methods Supported |
---|---|---|
Insert | Repository 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 |
Insert | Template 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 |
Select | Repository 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 |
Select | Template 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 |
Delete | Repository 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 |
Delete | Template 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 |
Update | Template 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
Icon | Description |
---|---|
Java MongoDB database | |
Java MongoDB collection | |
Java unknown MongoDB database | |
Java unknown MongoDB collection |
Links
Link type | Source and destination of link | Methods supported |
---|---|---|
parentLink | Between Mongo Objects (Collection → Database → Project) | - |
useLink | Between 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 |
useUpdateLink | Between the caller Spring Data Java Method objects and Mongo Collection Object | upsert update updateFirst updateOne updateMulti findAndModify findAndReplace |
useDeleteLink | Between the caller Spring Data Java Method objects and Mongo Collection Object | deleteAll deleteById delete findAndRemove dropCollection remove findAllAndRemove |
useInsertLink | Between 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