Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Data Mongo | Cannot authorize inserting into system.indexes documents without a string-typed

I am facing problem while trying to create Spring Data Mongo Repository.

Relevant code & config.:-

The model class:-

@Document(collection = "USER_DETAIL")
public class UserDetail implements
        org.springframework.security.core.userdetails.UserDetails, Serializable {

    private static final long serialVersionUID = -2637223077307659181L;

    @Id
    private String id;

    @Indexed(dropDups = true, name = "usernameIndex", unique = true)
    private String username;

    private String fname;
    private String lname;
    private List<UserRole> authorities;
    private String password;
    private boolean accountNonExpired;
    private boolean accountNonLocked;
    private boolean credentialsNonExpired;
    private boolean enabled;

        // getter & setters.
}

Spring Data Repository class :-

public interface UserDetailsRepository extends
        MongoRepository<UserDetail, String> {

    /**
     * Find a user by its username.
     * 
     * @param username
     * @return
     */
    public UserDetail findByUsername(String username);
}

Spring Java configuration :-

@Configuration
@EnableMongoRepositories(basePackages = { "x.y.z.repository" })
public class MongoRepositoryConfig {

    @Bean
    public MongoTemplate mongoTemplate() throws UnknownHostException {
        MongoTemplate mongoTemplate = new MongoTemplate(mongo(), "expunto");
        return mongoTemplate;
    }

    @Bean
    public Mongo mongo() throws UnknownHostException {
        MongoClient client = new MongoClient("localhost");
        return client;
    }

}

Error :- Cannot authorize inserting into system.indexes documents without a string-typed \"ns\" field." , "code" : 13 , "n" : 0 , "ok" : 1.0} at com.mongodb.CommandResult.getException(CommandResult.java:77) ~[mongo-java-driver-2.11.4.jar:na]

Stacktrace :-

Caused by: com.mongodb.WriteConcernException: { "serverUsed" : "localhost/127.0.0.1:27017" , "connectionId" : 10 , "err" : "Cannot authorize inserting into system.indexes documents without a string-typed \"ns\" field." , "code" : 13 , "n" : 0 , "ok" : 1.0}
    at com.mongodb.CommandResult.getException(CommandResult.java:77) ~[mongo-java-driver-2.11.4.jar:na]
    at com.mongodb.CommandResult.throwOnError(CommandResult.java:110) ~[mongo-java-driver-2.11.4.jar:na]
    at com.mongodb.DBTCPConnector._checkWriteError(DBTCPConnector.java:102) ~[mongo-java-driver-2.11.4.jar:na]
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:142) ~[mongo-java-driver-2.11.4.jar:na]
    at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:115) ~[mongo-java-driver-2.11.4.jar:na]
    at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:248) ~[mongo-java-driver-2.11.4.jar:na]
    at com.mongodb.DBApiLayer$MyCollection.createIndex(DBApiLayer.java:340) ~[mongo-java-driver-2.11.4.jar:na]
    at com.mongodb.DBCollection.createIndex(DBCollection.java:485) ~[mongo-java-driver-2.11.4.jar:na]
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.createIndex(MongoPersistentEntityIndexCreator.java:135) ~[spring-data-mongodb-1.5.0.RELEASE.jar:na]
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.checkForAndCreateIndexes(MongoPersistentEntityIndexCreator.java:129) ~[spring-data-mongodb-1.5.0.RELEASE.jar:na]
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.checkForIndexes(MongoPersistentEntityIndexCreator.java:121) ~[spring-data-mongodb-1.5.0.RELEASE.jar:na]
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.onApplicationEvent(MongoPersistentEntityIndexCreator.java:105) ~[spring-data-mongodb-1.5.0.RELEASE.jar:na]
    at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator.onApplicationEvent(MongoPersistentEntityIndexCreator.java:46) ~[spring-data-mongodb-1.5.0.RELEASE.jar:na]
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:98) ~[spring-context-4.0.5.RELEASE.jar:4.0.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:333) ~[spring-context-4.0.5.RELEASE.jar:4.0.5.RELEASE]
    at org.springframework.data.mapping.context.AbstractMappingContext.addPersistentEntity(AbstractMappingContext.java:307) ~[spring-data-commons-1.8.0.RELEASE.jar:na]
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:181) ~[spring-data-commons-1.8.0.RELEASE.jar:na]
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:141) ~[spring-data-commons-1.8.0.RELEASE.jar:na]
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentEntity(AbstractMappingContext.java:67) ~[spring-data-commons-1.8.0.RELEASE.jar:na]
    at org.springframework.data.mongodb.repository.support.MongoRepositoryFactory.getEntityInformation(MongoRepositoryFactory.java:141) ~[spring-data-mongodb-1.5.0.RELEASE.jar:na]
    at org.springframework.data.mongodb.repository.support.MongoRepositoryFactory.getTargetRepository(MongoRepositoryFactory.java:83) ~[spring-data-mongodb-1.5.0.RELEASE.jar:na]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:158) ~[spring-data-commons-1.8.0.RELEASE.jar:na]
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:224) ~[spring-data-commons-1.8.0.RELEASE.jar:na]
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:210) ~[spring-data-commons-1.8.0.RELEASE.jar:na]
    at org.springframework.data.mongodb.repository.support.MongoRepositoryFactoryBean.afterPropertiesSet(MongoRepositoryFactoryBean.java:108) ~[spring-data-mongodb-1.5.0.RELEASE.jar:na]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612) ~[spring-beans-4.0.5.RELEASE.jar:4.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549) ~[spring-beans-4.0.5.RELEASE.jar:4.0.5.RELEASE]
    ... 40 common frames omitted

UPDATE:-

Spring Data Mongo version - 1.5.0.RELEASE. Build system - Maven

Thanks for your help.

like image 388
Kumar Sambhav Avatar asked Jan 29 '26 23:01

Kumar Sambhav


1 Answers

You need to upgrade to mongo-java-driver 2.12.1.

In Spring Data MongoDB 1.5, they switched from collection.ensureIndex to collection.createIndex. In the 2.11.4 driver, this didn't put the default options on the index, i.e. "name" and "ns" options. This was fixed in the 2.12.1 driver.

See: https://jira.mongodb.org/browse/JAVA-1141.

like image 72
GeertPt Avatar answered Jan 31 '26 13:01

GeertPt



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!