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

春のデータmongoのコレクションベースのマルチテナンシー

    MappingMongoEntityInformationを拡張して、getCollectionName()をオーバーライドできます。リポジトリ操作は、各操作でgetCollectionName()を呼び出します。 TenantIdはThreadLocalであると想定しています

    public class TenantThreadLocal extends ThreadLocal<String> {
        private final static TenantThreadLocal instance = new TenantThreadLocal();
    
        public static TenantThreadLocal instance() {
            return instance;
        }
    }
    

    そして、コンストラクターが省略されたオーバーライドされたクラス。

    public class TenantMappingMongoEntityInformation<T, ID extends java.io.Serializable>  extends MappingMongoEntityInformation<T, ID> {
    
        @Override
        public String getCollectionName() {
            return TenantThreadLocal.instance().get() + super.getCollectionName();
        }
    }
    

    次に、リポジトリを作成します:

    MongoPersistentEntity<YourObject> persistentEntity = 
        (MongoPersistentEntity<YourObject>) 
        mongoOperations.getConverter()
        .getMappingContext()
        .getPersistentEntity(YourObject.class);
    
    MongoEntityInformation<YourObject, ObjectId> mongoEntityInformation =
        new MappingMongoEntityInformation<YourObject, ObjectId>(persistentEntity);
    
    CrudRepository<YourObject, ObjectId> repository =
        new SimpleMongoRepository<YourObject, ObjectId>(mongoEntityInformation, mongoOperations);
    



    1. 正規表現を使用してMongoDBからサブストリングのリストを抽出する

    2. find({})は空の配列マングースを返します

    3. MongoDB $ dateToParts

    4. mongorestoreエラー:ダンプファイルをどうするかわからない