sql >> Database teknologi >  >> NoSQL >> MongoDB

Undgå, at Spring Data for Mongo konverterer id'er til ObjectId

Jeg fandt endelig en løsning på dette. Sandsynligvis ikke den bedste løsning, men virker.

Det, jeg gjorde, var at fjerne konverteren fra String til ObjectId den MongoTemplate bruger gennem QueryMapper . På denne måde oprettede jeg følgende Mongo-konverter:

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();
            }
        });
    }
}

Og så overførte jeg implementeringen af ​​konverteren til 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å denne måde, når du forsøger at konvertere fra String til ObjectId, kaster det en undtagelse, og det gør det ikke. Bemærk venligst, at du sandsynligvis bare kan fjerne konverteren fra conversionService .



  1. Hvordan sorterer og begrænser man resultater i mongodb?

  2. Hvordan får man Node-objekt, når man bruger Neo4j jdbc?

  3. hvordan man sammenligner to felter i et dokument i pipeline aggregering (mongoDB)

  4. Node.js + MongoDB - findOne() returnerer et felt, der ikke virker