Skip to content

IndexInfo::isIndexForFields returns false positives #5187

@allantodd

Description

@allantodd

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.

Metadata

Metadata

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions