@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.