@Indexed on nested property not working in Spring-data for mongo

In my case I had a fresh spring boot application 2.3.0 with just @Document, @Id and @Indexed annotations. I was able to retrieve and insert documents but it refused to create the index other than the PK. Finally I figured that there is a property that you need to enable.

spring.data.mongodb.auto-index-creation = true

As a matter of fact it even works on nested objects without @Document annotation.

Hope this helps :)


As far as I remember, annotating embedded fields with @Indexed will not work. @CompoundIndex is the way to go:

@Document(collection = "user")
@TypeAlias("user")
@CompoundIndexes({
    @CompoundIndex(name = "contact_email", def = "{ 'contact.mail': 1 }", unique = true)
})
public class User {
    @Id
    private ObjectId id;
    private Contact info = new Contact();
}

Obsolete answer, this was with and older version of mongodb 1.x.


Had the same issue, it seems that your Contact class is missing the @Document annotation i.e.

@Document
public class Contact {
    @Indexed(unique = true)
    private String mail;
}

Should work, quote from the spring mongodb reference

Automatic index creation is only done for types annotated with @Document.