sql >> データベース >  >> NoSQL >> MongoDB

MongoのSpringDataがIDをObjectIdに変換しないようにする

    私はついにこれに対する解決策を見つけました。おそらく最良の選択肢ではありませんが、機能します。

    私がしたことは、Stringからコンバーターを削除することでした ObjectIdへ そのMongoTemplate QueryMapperを介して使用します 。このようにして、次のMongoコンバーターを作成しました:

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

    次に、そのコンバーターの実装を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>
    

    このように、StringからObjectIdに変換しようとすると、例外がスローされ、実行されません。おそらくconversionServiceからコンバーターを削除できることに注意してください 。



    1. Mongoコレクションの特殊文字の操作

    2. mongoクエリを使用してIDで配列要素を更新します

    3. node-mongodb-native:アプリケーションを介して接続コールバックのdbapiオブジェクトを共有するにはどうすればよいですか

    4. Spring boot / mongoは、インデックスアノテーションを使用してインデックスを作成しません