sql >> Databasteknik >  >> NoSQL >> MongoDB

Förhindra Spring Data för Mongo att konvertera ID till ObjectId

Jag hittade äntligen en lösning på detta. Förmodligen inte det bästa alternativet, men fungerar.

Det jag gjorde var att ta bort omvandlaren från String till ObjectId den där MongoTemplate använder genom QueryMapper . På så sätt skapade jag följande Mongo-omvandlare:

public class CustomMongoConverter extends MappingMongoConverter {
    public CustomMongoConverter(MongoDbFactory mongoDbFactory, MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext) {
        super(mongoDbFactory, mappingContext);
        conversionService.addConverter(new Converter<String, ObjectId>() {
            @Override
            public ObjectId convert(String source) {
                throw new RuntimeException();
            }
        });
    }
}

Och sedan skickade jag implementeringen av omvandlaren till MongoTemplate :

<bean id="mongoConverter" class="com.abcompany.model.repositories.utils.CustomMongoConverter">
    <constructor-arg ref="mongoDbFactory"/>
    <constructor-arg>
        <bean class="org.springframework.data.mongodb.core.mapping.MongoMappingContext"/>
    </constructor-arg>
</bean>

<bean class="org.springframework.data.mongodb.core.MongoTemplate" id="mongoTemplate">
    <constructor-arg ref="mongoDbFactory"/>
    <constructor-arg ref="mongoConverter"/>
</bean>

På det här sättet, när man försöker konvertera från String till ObjectId, skapar det ett undantag och det gör det inte. Observera att du förmodligen bara kan ta bort omvandlaren från conversionService .



  1. MongoError:getaddriinfo ENOTFOUND undefined undefined:27017

  2. MongoDB - Fråga om det sista elementet i en array?

  3. jag använder node.js löfte för att validera att antingen användarnamn finns i db eller inte

  4. Hur implementerar man Redis Cache med Django Rest Framework?