I'm doing the following search with mongodb in a Spring application:
import org.bson.Document;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.FindAndModifyOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
private CampaignEntity incrByWithConversionRate(ObjectId campaignId, String key) {
Query query = new Query();
query.addCriteria(Criteria.where("id").is(campaignId));
Update update = new Update();
update.inc(key);
update.set("conversionRate", new Document("$divide", Arrays.asList("$clicks", "$views")));
return mongoTemplate.findAndModify(
query, update,
new FindAndModifyOptions().returnNew(true), CampaignEntity.class);
}
The problem is that it fails with the following error:
org.springframework.data.mapping.MappingException: Expected to read Document Document{{$divide=[$clicks, $views]}} into type class java.lang.Float but didn't find a PersistentEntity for the latter!
Note: The CampaignEntity class is defined as follows:
@Data
@Document(collection = "campaigns")
public abstract class CampaignEntity extends BaseEntity {
private Integer clicks = 0;
private Integer views = 0;
private Float conversionRate;
}