MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Мулти наемател, базиран на колекция в spring data 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB Aggregation Framework - Преименуване на динамично поле

  2. Изтрийте ключ от документ на MongoDB с помощта на Mongoose

  3. Намерете документи в MongoDB, чиито с поле на масив е подмножество на масив от заявка

  4. Express JS Показване на данни по ID

  5. MongoDB - отворена и затворена връзка - съвет за добра практика