sql >> Database >  >> NoSQL >> MongoDB

Voorkom dat Spring Data voor Mongo id's naar ObjectId converteert

Hier heb ik eindelijk een oplossing voor gevonden. Waarschijnlijk niet de beste optie, maar werkt.

Wat ik deed was de converter verwijderen uit String naar ObjectId dat MongoTemplate gebruikt via QueryMapper . Op deze manier heb ik de volgende Mongo-converter gemaakt:

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

En toen gaf ik die implementatie van de converter door aan 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>

Op deze manier, wanneer het probeert te converteren van String naar ObjectId, genereert het een uitzondering en doet het het niet. Houd er rekening mee dat u de converter waarschijnlijk gewoon kunt verwijderen uit conversionService .



  1. Django, Redis:waar verbindingscode te plaatsen

  2. Leg het geaggregeerde raamwerk uit

  3. MongoDB aggregaat vullen ontbrekende dagen

  4. SignalR Core - Fout:Websocket gesloten met statuscode:1006