Solución:
Por lo que recuerdo, anotar campos incrustados con @Indexed no funcionará. @CompoundIndex es el camino a seguir:
@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();
}
En mi caso, tenía una nueva aplicación de arranque de primavera 2.3.0 con solo anotaciones @Document, @Id y @Indexed. Pude recuperar e insertar documentos, pero se negó a crear el índice que no sea el PK. Finalmente pensé que hay una propiedad que necesitas habilitar.
spring.data.mongodb.auto-index-creation = true
De hecho, incluso funciona en objetos anidados sin la anotación @Document.
Espero que esto ayude 🙂
Respuesta obsoleta, esto fue con una versión anterior de mongodb 1.x.
Tuvo el mismo problema, parece que su Contact
a la clase le falta el @Document
anotación, es decir
@Document
public class Contact {
@Indexed(unique = true)
private String mail;
}
Debería funcionar, cite de la referencia de mongodb de primavera
La creación automática de índices solo se realiza para los tipos anotados con @Document.