Saltar al contenido

@Indexed en propiedad anidada que no funciona en Spring-data para mongo

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *