diff --git a/javers-persistence-mongo/src/main/java/org/javers/repository/mongo/MongoRepository.java b/javers-persistence-mongo/src/main/java/org/javers/repository/mongo/MongoRepository.java index cccee2f49..f93467219 100644 --- a/javers-persistence-mongo/src/main/java/org/javers/repository/mongo/MongoRepository.java +++ b/javers-persistence-mongo/src/main/java/org/javers/repository/mongo/MongoRepository.java @@ -42,6 +42,7 @@ */ public class MongoRepository implements JaversRepository, ConfigurationAware { private final static int DEFAULT_CACHE_SIZE = 5000; + private final static double COMMIT_ID_PRECISION = 0.005; private static final int DESC = -1; private final MongoSchemaManager mongoSchemaManager; @@ -274,11 +275,11 @@ private Bson applyQueryParams(Bson query, Optional queryParams) { query = Filters.and(query, Filters.lte(COMMIT_DATE, UtilTypeCoreAdapters.serialize(params.to().get()))); } if (params.toCommitId().isPresent()) { - query = Filters.and(query, Filters.lte(COMMIT_ID, commitIdforQuery(params.toCommitId().get()))); + query = Filters.and(query, Filters.lte(COMMIT_ID, params.toCommitId().get().valueAsNumber().doubleValue() + COMMIT_ID_PRECISION)); } if (params.commitIds().size() > 0) { - query = Filters.in(COMMIT_ID, params.commitIds().stream() - .map(it -> commitIdforQuery(it)).collect(Collectors.toSet())); + query = Filters.or(params.commitIds().stream() + .map(it -> commitIdFilter(it)).collect(Collectors.toList())); } if (params.version().isPresent()) { query = Filters.and(query, createVersionQuery(params.version().get())); @@ -300,11 +301,15 @@ private Bson applyQueryParams(Bson query, Optional queryParams) { return query; } - private Object commitIdforQuery(CommitId commitId) { + private Bson commitIdFilter(CommitId commitId) { if (commitId.getMinorId() > 0) { commitId.valueAsNumber().doubleValue(); + return Filters.and( + Filters.gte(COMMIT_ID, commitId.valueAsNumber().doubleValue() - COMMIT_ID_PRECISION), + Filters.lte(COMMIT_ID, commitId.valueAsNumber().doubleValue() + COMMIT_ID_PRECISION) + ); } - return commitId.getMajorId(); + return Filters.eq(COMMIT_ID, commitId.getMajorId()); } private FindIterable applyQueryParams(FindIterable findIterable, Optional queryParams) {