The javadoc for org.springframework.data.mongodb.core.index.IndexInfo::isIndexForFields states
Returns whether the index is covering exactly the fields given independently of the order
However the implementation is incorrect as it does the following
return this.indexFields.stream().map(IndexField::getKey).collect(Collectors.toSet()).containsAll(keys);
If this method is called with one attribute and a compound index exists that contains this attribute and some others, it returns true.
One effect of this can be that indexes required for an efficient lookup on the given attribute are not created as part of a migration process - an index where that is the third attribute could be matched and it is not useful for the purpose.
The code could be fixed by also comparing the sizes of the collections.
The javadoc for org.springframework.data.mongodb.core.index.IndexInfo::isIndexForFields states
However the implementation is incorrect as it does the following
return this.indexFields.stream().map(IndexField::getKey).collect(Collectors.toSet()).containsAll(keys);If this method is called with one attribute and a compound index exists that contains this attribute and some others, it returns true.
One effect of this can be that indexes required for an efficient lookup on the given attribute are not created as part of a migration process - an index where that is the third attribute could be matched and it is not useful for the purpose.
The code could be fixed by also comparing the sizes of the collections.